lenguajes de programación 2textos.pucp.edu.pe/pdf/468.pdf · • en la poo, un programa se...

25
Diapositiva 1 PUCP, Lenguajes de Programación 2 – INF282 Lenguajes de Programación 2 Lenguajes de Programación 2 Programación Orientada a Objetos Programación Orientada a Objetos Objetos y Clases Objetos y Clases

Upload: others

Post on 30-Apr-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Diapositiva 1 PUCP, Lenguajes de Programación 2 – INF282

Lenguajes de Programación 2Lenguajes de Programación 2

Programación Orientada a ObjetosProgramación Orientada a ObjetosObjetos y ClasesObjetos y Clases

Diapositiva 2 PUCP, Lenguajes de Programación 2 – INF282

¿ Qué es un Objeto?¿ Qué es un Objeto?

• Es la representación del estado y Es la representación del estado y comportamiento de un objeto real o abstracto.comportamiento de un objeto real o abstracto.– E l E l estadoestado esta representado por un conjunto de esta representado por un conjunto de

“datos”“datos”– E l E l comportamiento comportamiento esta representado por un esta representado por un

conjunto de “métodos”conjunto de “métodos”

Diapositiva 3 PUCP, Lenguajes de Programación 2 – INF282

¿ Qué es un Objeto?¿ Qué es un Objeto?

• En la POO, un programa se conceptualiza En la POO, un programa se conceptualiza como un conjunto de objetos en interaccióncomo un conjunto de objetos en interacción

• Los objetos interactúan enviándose mensajes Los objetos interactúan enviándose mensajes unos a otrosunos a otros

• Un objeto responde a un mensaje ejecutando Un objeto responde a un mensaje ejecutando un métodoun método

Diapositiva 4 PUCP, Lenguajes de Programación 2 – INF282

¿ Qué son las Clases?¿ Qué son las Clases?

• Un conjunto de Un conjunto de objetosobjetos que comparten el que comparten el mismo comportamiento y tipos de sus datos mismo comportamiento y tipos de sus datos (no los valores) se dicen que pertenecen a la (no los valores) se dicen que pertenecen a la misma misma claseclase

• En POO, una En POO, una claseclase es un tipo de dato, cuyas es un tipo de dato, cuyas instancias son instancias son objetosobjetos

• Una Una claseclase contiene la descripción de los datos contiene la descripción de los datos y métodos de un conjunto de y métodos de un conjunto de objetosobjetos

Diapositiva 5 PUCP, Lenguajes de Programación 2 – INF282

¿ Qué son las Clases?¿ Qué son las Clases?

• Las clases deben ser Las clases deben ser implementadas de forma tal que implementadas de forma tal que los objetos que de ellas se creen los objetos que de ellas se creen s iempres iempre tengan un tengan un estado estado cons is tentecons is tente

• Pueden encapsular:Pueden encapsular:– Datos (datos miembros)Datos (datos miembros)– Métodos (funciones miembros)Métodos (funciones miembros)– Otros tipos de datos (tipos Otros tipos de datos (tipos

miembros)miembros)

Objeto de la clase Cadena.

Valor=“Hola”

Long=2

Inconsistente: La longitud no coincide con el valor.

Diapositiva 6 PUCP, Lenguajes de Programación 2 – INF282

Principios de la POOPrincipios de la POO

• EncapsulamientoEncapsulamiento– Al mantener juntos datos y comportamientoAl mantener juntos datos y comportamiento

• OcultamientoOcultamiento– Al restringir el acceso de otros objetos a sus Al restringir el acceso de otros objetos a sus

datos. Acceso indirecto, por sus métodos.datos. Acceso indirecto, por sus métodos.

• HerenciaHerencia• PolimorfismoPolimorfismo

Diapositiva 7 PUCP, Lenguajes de Programación 2 – INF282

Declaración de una ClaseDeclaración de una Clase

• S intaxis general de declaración:S intaxis general de declaración:[modificadores] class <Nombre> [esp. Herencia][modificadores] class <Nombre> [esp. Herencia]{ <datos, funciones y tipos> }{ <datos, funciones y tipos> }

• Diferencias entre C++, Java y C#:Diferencias entre C++, Java y C#:– Los modificadores de declaraciLos modificadores de declaracióón de una clase.n de una clase.– La especificaciLa especificacióón de la herencia.n de la herencia.– La especificaciLa especificacióón del tipo de acceso y el tipo de acceso por n del tipo de acceso y el tipo de acceso por

defecto.defecto.– La declaraciLa declaracióón de constructor y destructor.n de constructor y destructor.– Las auto-referencia y la referencia a la base.Las auto-referencia y la referencia a la base.– La especificaciLa especificacióón de miembros fuera de su clase.n de miembros fuera de su clase.

Diapositiva 8 PUCP, Lenguajes de Programación 2 – INF282

Ejemplo en C++Ejemplo en C++class Persona {class Persona {

char* nombre;char* nombre;int edad;int edad;

public:public:Persona(char* n, int edad) {Persona(char* n, int edad) { nombre = n;nombre = n; this->edad = edad;this->edad = edad;}}~Persona() {~Persona() { cout << "Dcout << "Destructor: estructor: " <<" <<

nombre << endl;nombre << endl;}}void Imprimir() {void Imprimir() { cout << "Nombre: " <<cout << "Nombre: " << nombre << nombre <<

", Edad: " <<", Edad: " << edad << endl;edad << endl;}}

};};

void main() {void main() {

Persona p("Jose", 30);Persona p("Jose", 30);

p.Imprimir();p.Imprimir();

Persona *q = Persona *q =

new Persona("Pedro", new Persona("Pedro", 40);40);

q->Imprimir();q->Imprimir();

delete q;delete q;

}}

Diapositiva 9 PUCP, Lenguajes de Programación 2 – INF282

Ejemplo en JavaEjemplo en Javaclass Persona {class Persona {

String nombre; int edad;String nombre; int edad;public Persona(String n, int edad) {public Persona(String n, int edad) { nombre = n; this.edad = edad;nombre = n; this.edad = edad;}}public void finalize() {public void finalize() { System.out.println("Destructor: " + nombre);System.out.println("Destructor: " + nombre);}}public void Imprimir(){public void Imprimir(){ System.out.println("Nombre: " + nombre + ", Edad: " + edad);System.out.println("Nombre: " + nombre + ", Edad: " + edad);}}

}}class PruebaDePersona {class PruebaDePersona {

public static void main(String[] args) {public static void main(String[] args) {Persona p = new Persona("Jose", 30);Persona p = new Persona("Jose", 30); p.Imprimir();p.Imprimir();Persona q = new Persona("Pedro", 40);Persona q = new Persona("Pedro", 40); q.Imprimir();q.Imprimir();

}}}}

Diapositiva 10 PUCP, Lenguajes de Programación 2 – INF282

Ejemplo en C#Ejemplo en C#using System;using System;class Persona {class Persona {

String nombre; int edad;String nombre; int edad;public Persona(String n, int edad) {public Persona(String n, int edad) {

nombre = n; this.edad = edad;nombre = n; this.edad = edad;}}~Persona() {~Persona() {

Console.WriteLine("Destructor de: " + nombre);Console.WriteLine("Destructor de: " + nombre);}}public void Imprimir() {public void Imprimir() {

Console.WriteLine("Nombre: " + nombre + ", Edad: " + edad);Console.WriteLine("Nombre: " + nombre + ", Edad: " + edad); }}}}class Principal {class Principal {

public static void Main() {public static void Main() {Persona p = new Persona("Jose", 30); p.Imprimir();Persona p = new Persona("Jose", 30); p.Imprimir();Persona q = new Persona("Pedro", 40); q.Imprimir();Persona q = new Persona("Pedro", 40); q.Imprimir();

}}}}

Diapositiva 11 PUCP, Lenguajes de Programación 2 – INF282

Datos MiembrosDatos Miembros

• DeclaraciDeclaracióón:n:[modificadores] tipo nombre [inicializador][modificadores] tipo nombre [inicializador]

• Modificadores:Modificadores:• C++: const, staticC++: const, static• Java: [mod. Acceso], final, staticJava: [mod. Acceso], final, static• C#: [mod. Acceso], const, readonly, staticC#: [mod. Acceso], const, readonly, static

• InicializaciInicializacióón automn automáática:tica:• C++: S olo para tipos definidos por el programador.C++: S olo para tipos definidos por el programador.• Java y C#: S iempre que no se inicialice en la misma decl.Java y C#: S iempre que no se inicialice en la misma decl.

Diapositiva 12 PUCP, Lenguajes de Programación 2 – INF282

MétodosMétodos

• DeclaraciDeclaracióón:n:[mod] tipo nombre( args ) [mod] { cuerpo }[mod] tipo nombre( args ) [mod] { cuerpo }

• Modificadores:Modificadores:• C++: static, virtual, inline, const, C++: static, virtual, inline, const, ““= 0= 0””• Java: [mod. Acceso], final, static, abstract, synchronizedJava: [mod. Acceso], final, static, abstract, synchronized• C#: [mod. Acceso], static, virtual, override, abstractC#: [mod. Acceso], static, virtual, override, abstract

• Paso de parPaso de paráámetros:metros:• C++: Por valor, por puntero, por referenciaC++: Por valor, por puntero, por referencia• Java: Primitivos por valor, objetos por referencia,…Java: Primitivos por valor, objetos por referencia,…• C#: Por valor, ref, out, paramsC#: Por valor, ref, out, params

Diapositiva 13 PUCP, Lenguajes de Programación 2 – INF282

Ámbitos de DeclaraciónÁmbitos de Declaración

• Definen espacios donde es posible declarar Definen espacios donde es posible declarar elementos de un programa (clases, datos, elementos de un programa (clases, datos, métodos, etc.).métodos, etc.).

• Permiten organizar los elementos de un Permiten organizar los elementos de un programa definiendo:programa definiendo:– Espacios de nombresEspacios de nombres– La visibilidad y por tanto, los accesosLa visibilidad y por tanto, los accesos

Diapositiva 14 PUCP, Lenguajes de Programación 2 – INF282

Ámbitos de DeclaraciónÁmbitos de Declaración

• En C++: De clase, de función o método, de En C++: De clase, de función o método, de bloque, namespace.bloque, namespace.

• En Java: De clase, de método, paquete.En Java: De clase, de método, paquete.• En C#: De clase, de método y namespace.En C#: De clase, de método y namespace.

Diapositiva 15 PUCP, Lenguajes de Programación 2 – INF282

Modificadores de AccesoModificadores de Acceso

• Dentro de un ámbito, los elemento tiene acceso directo unos a Dentro de un ámbito, los elemento tiene acceso directo unos a otros.otros.

• Para determinar la visibilidad de un elemento desde un ámbito Para determinar la visibilidad de un elemento desde un ámbito distinto, se utilizan distinto, se utilizan modificadores de accesomodificadores de acceso..

class Cuadrado {class Cuadrado {private int lado;private int lado;public Cuadrado(int lado) { this.lado = lado; }public Cuadrado(int lado) { this.lado = lado; }public int area( ) { return lado * lado; }public int area( ) { return lado * lado; }

}}class Principal {class Principal {

public static void main(String[] args) {public static void main(String[] args) {Cuadrado c = new Cuadrado(10);Cuadrado c = new Cuadrado(10);System.out.println(“Area = “ + c.area());System.out.println(“Area = “ + c.area()); // OK// OKSystem.out.println(“Lado = “ + c.lado);System.out.println(“Lado = “ + c.lado);// ERROR// ERROR}}

}}

Diapositiva 16 PUCP, Lenguajes de Programación 2 – INF282

Modificadores de AccesoModificadores de Acceso

• C++, Java y C# : private, protected y public.C++, Java y C# : private, protected y public.• Java:Java:

– protectedprotected = paquete + clases derivadas = paquete + clases derivadas– de-paquete = paquete (por defecto)de-paquete = paquete (por defecto)

• C#:C#:– internal = ensamblajeinternal = ensamblaje– internal protected = ensamblaje + clases derivadasinternal protected = ensamblaje + clases derivadas

• C++ y C#C++ y C#– por defecto = privatepor defecto = private

Diapositiva 17 PUCP, Lenguajes de Programación 2 – INF282

Modificadores de AccesoModificadores de Acceso

• Los Los áámbitos pueden mbitos pueden anidarseanidarse. Algunos . Algunos áámbitos hijosmbitos hijos puede tener un modificador de puede tener un modificador de acceso, el que afecta a todos sus elementos.acceso, el que afecta a todos sus elementos.

package Figuras;package Figuras;

public class C irculo { public int dato1; ... }public class C irculo { public int dato1; ... }

class Cuadrado {public int dato2; ... }class Cuadrado {public int dato2; ... }

Accesibles solo en el paquete “Figuras”

Accesibles desde fuera del paquete “Figuras”

Diapositiva 18 PUCP, Lenguajes de Programación 2 – INF282

ConstructoresConstructores

• Tipos:Tipos:– De instancia.De instancia.– EstEstááticos:ticos:

• Java: class M iC lase { static { ... } ... }Java: class M iC lase { static { ... } ... }• C#: class M iC lase { static M iC lase( ) { ...} ... }C#: class M iC lase { static M iC lase( ) { ...} ... }

Desde un ctor. estDesde un ctor. estáático solo se puede acceder a miembros tico solo se puede acceder a miembros estestááticos.ticos.

• C#: Permite llamar un ctor. desde otro:C#: Permite llamar un ctor. desde otro:class A { A(int a) { ... } A( ) : base(10) { ... } ... }class A { A(int a) { ... } A( ) : base(10) { ... } ... }

Diapositiva 19 PUCP, Lenguajes de Programación 2 – INF282

DestructoresDestructores

• Tipos de finalizaciTipos de finalizacióón:n:– Determinista: C++ => DestructorDeterminista: C++ => Destructor– No-determinista: Java, C# => FinalizadorNo-determinista: Java, C# => Finalizador

• No se puede determinar cuando se destruye un objeto.No se puede determinar cuando se destruye un objeto.• Uso de un recolector de basura.Uso de un recolector de basura.• Finalizadores: S olo acciones no crFinalizadores: S olo acciones no crííticas.ticas.• Acciones crAcciones crííticas: Mticas: M éétodo llamado expltodo llamado explíícitamente.citamente.

• S intaxis:S intaxis:– Java: class A { protected void finalize( ) { ... } ... }Java: class A { protected void finalize( ) { ... } ... }– C#: class A { ~A( ) { ... } ... }C#: class A { ~A( ) { ... } ... }

Diapositiva 20 PUCP, Lenguajes de Programación 2 – INF282

Arreglos , Propiedades e IndizadoresArreglos , Propiedades e Indizadores

Diapositiva 21 PUCP, Lenguajes de Programación 2 – INF282

ArreglosArreglos

• Java:Java:• S on clases especiales.S on clases especiales.• ÚÚnicamente unidimensionales.nicamente unidimensionales.• Los multidimensionales se manejan como arreglos de Los multidimensionales se manejan como arreglos de

arreglos.arreglos.• C lase C lase Arrays.Arrays.

• C#:C#:• S on clases especiales.S on clases especiales.• Unidimensionales y multidimensionales.Unidimensionales y multidimensionales.• E l flujo de control E l flujo de control foreachforeach trabaja con arreglos. trabaja con arreglos.• C lase C lase ArrayArray..

Diapositiva 22 PUCP, Lenguajes de Programación 2 – INF282

ArreglosArreglos

• Java:Java:– int [ ] arreglo; arreglo = new int [10]; arreglo[2] = 4;int [ ] arreglo; arreglo = new int [10]; arreglo[2] = 4;– int [ ] arreglo = {3,6,4};int [ ] arreglo = {3,6,4};– int [ ][ ] aa = new int[5][ ]; aa[0] = new int [15]; ...int [ ][ ] aa = new int[5][ ]; aa[0] = new int [15]; ...– int [ ][ ] aa = new int[5][10]; aa[2][3] = 100;int [ ][ ] aa = new int[5][10]; aa[2][3] = 100;– for(int i = 0; i < aa.length; i++)for(int i = 0; i < aa.length; i++)

for(int j = 0; j < aa[i].length; i++) { ... aa[i][j] ... }for(int j = 0; j < aa[i].length; i++) { ... aa[i][j] ... }

Diapositiva 23 PUCP, Lenguajes de Programación 2 – INF282

ArreglosArreglos

• C#:C#:– int [ ] arrUni; int [,] arrMulti; int [ ][ ] arrArr;int [ ] arrUni; int [,] arrMulti; int [ ][ ] arrArr;– int [,] arrMulti = new int [3,2] {{1,2},{3,4},{5,6}};int [,] arrMulti = new int [3,2] {{1,2},{3,4},{5,6}};– arrMulti = new int [10,20]; arrMulti[2,3] = 50;arrMulti = new int [10,20]; arrMulti[2,3] = 50;– for(int i = 0; i < aa.GetLength(0); i++)for(int i = 0; i < aa.GetLength(0); i++)

for(int j = 0; j < aa.GetLength(1); j++) { ... aa[i,j] ... }for(int j = 0; j < aa.GetLength(1); j++) { ... aa[i,j] ... }– ““arrMulti.RankarrMulti.Rank”” vale 2. vale 2.

Diapositiva 24 PUCP, Lenguajes de Programación 2 – INF282

PropiedadesPropiedades

• S e maneja como un dato miembro pS e maneja como un dato miembro púúblico.blico.• Al obtener/asignar se llama a un mAl obtener/asignar se llama a un méétodo de todo de

obtenciobtencióón/establecimiento.n/establecimiento.

class A { private int MiValor;class A { private int MiValor; [mod. acc.] int MiProp {[mod. acc.] int MiProp { set { MiValor = set { MiValor = valuevalue; }; } get { return MiValor; }get { return MiValor; }

}}}}

Diapositiva 25 PUCP, Lenguajes de Programación 2 – INF282

IndizadoresIndizadores

• Permite trabajar un objeto como si fuese un Permite trabajar un objeto como si fuese un arreglo.arreglo.

class B {class B {public int this [int indice] {public int this [int indice] {

set {...}set {...} get {...}get {...}

}} }}