unidad 2.1: introducciÓn a la orientaciÓn a objetos
TRANSCRIPT
![Page 1: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/1.jpg)
Unidad 2.1:
INTRODUCCIÓN A LA ORIENTACIÓN A
OBJETOS
![Page 2: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/2.jpg)
•Promueve entendimiento del mundo real.•Provee una base práctica para la implementación en computador.
•Atiende dos propósitos:
•Concepto, abstracción o cosa con límite y significado conocido para el problema en estudio.
Objeto:
Clases y Objetos
![Page 3: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/3.jpg)
Clase:
•Describe un grupo de objetos con propiedades similares (atributos), comportamiento común (operaciones), relaciones comunes con otros objetos, y semántica común.
Clases y Objetos
•Cada objeto “conoce” su clase, y la puede determinar en tiempo de ejecución. Es una propiedad implícita del objeto.
![Page 4: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/4.jpg)
Clase (cont.):
•Permite un esquema de acceso del tipo cliente/servidor.
•Agrega conceptos de modelamiento más avanzados, como encapsulación, herencia, polimorfismo, interfaces.
Clases y Objetos
![Page 5: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/5.jpg)
Clase (cont.):
•A pesar de que son los objetos el centro del modelamiento, son las clases las que se modelan, pues al agrupar los objetos en clases, es posible hacer la abstracción del problema.
Clases y Objetos
![Page 6: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/6.jpg)
public class Pila {
private int datos[10]; private int tope; public Stack() { tope = -1; } public void enqueue(int valor) { if (tope < 9) datos[++tope] = valor; } public boolean full() { if (tope == 9) return true; else return false; }
Clases y Objetos
public class Programa {
public static void main (String args[]) {
Pila p = new Pila();
... if (! p.full()) p.enqueue(3);
}}
![Page 7: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/7.jpg)
Encapsulamiento de Información:
•Oculta ciertos elementos del objeto, permitiendo definir y trabajar con su interfaz.•Protege la implementación, dejando ver sólo los servicios que la clase provee para sus objetos (caja negra).
Clases y Objetos
![Page 8: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/8.jpg)
arreglo datos
tope
enqueue
full
Sección privada: • arreglo datos• entero tope
Sección pública: • enqueue• full
Encapsulamiento de Información:
Clases y Objetos
![Page 9: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/9.jpg)
datos: Arraytope: integer
enqueue full ...
Diagrama de Clases UML:
Clases y Objetos
Stack
![Page 10: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/10.jpg)
Asociaciones entre Clases:•Un asociación es una relación entre tipos
(o más concretamente, instancias de estos tipos) que indica alguna conexión significativa e interesante.
Clases y Objetos
![Page 11: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/11.jpg)
Conyuge
NombreConyugeFechaMatrimonio
Empleado
NombreEmpleadoFechaNacimiento
FirmarContrato()RecibirSueldo()
1..10..1 1..10..1
Diagrama de Clases UML: asociaciones entre clases.
Ejemplo de Asociación 1:1, Binaria
Clases y Objetos
![Page 12: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/12.jpg)
Composición:•La composición es un tipo especial de
asociación, que también modela relaciones “todo/parte”. La diferencia es que tiene una fuerte relación de pertenencia y vidas coincidentes de la parte con el todo. •Las “partes” pueden crearse después del “todo”, pero una vez creadas, viven y mueren con el “todo”.
Clases y Objetos
![Page 13: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/13.jpg)
Composición: ejemplo.
Clases y Objetos
![Page 14: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/14.jpg)
Herencia:
• Propiedad mediante la cual instancias de una clase “hija” (subclase) puedan tener acceso tanto a la estructura como al comportamiento asociados a una clase “padre” (superclase).• Las clases que se organizan en torno a la herencia siguen una estructura jerárquica.
Herencia
![Page 15: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/15.jpg)
public class Persona {
private String nombre(30); private String rut(9); private String nombre(30); private Date fechaNacimiento(9);
public Persona() { ...
} public int edad() { ...
} public void mudanza() { ...
}
...}
Clases y Objetos
public class Alumno extends Persona {
private int curso; private String carrera(30);
public void matricularse() { ... }
public void egresar() { ... }}
![Page 16: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/16.jpg)
Herencia:
• Es siempre transitiva, es decir una clase puede heredar características de superclases alejadas varias niveles.
• La herencia significa que el comportamiento y la estructura de las subclases son siempre una extensión de las propiedades asociadas con la(s) superclase(s).
Herencia
![Page 17: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/17.jpg)
Diagrama de Clase UML: Herencia.
Persona
NombreRUTDireccionFechaNacimiento
Edad()Mudanza()
Alumno
CursoCarrera
Matricularse()Egresar()
Herencia
![Page 18: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/18.jpg)
Herencia:
• Por otro lado, ya que una subclase es una forma más especializada (o restringida) de la superclase, en cierto modo también es una versión restringida de la superclase.• Lo anterior parece una contradicción, pero es de donde toma fuerza la herencia en sí misma.
Herencia
![Page 19: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/19.jpg)
Usuario
login : Stringpassword : StringNombre : StringclaveDB
getNombre()login()load()
Profesor
horas_de_trabajo : IntegerjefeCurso : String
fijarPrueba()
Administrativo
cargo : String
marcarTarjeta()
Empleado
sueldo : Integertitulo : String
pagarSueldo()
Secretaria
matricularAlumno()
Director
contratarProfesor()
Portero
limpiarPasillo()
Alumno
curso : Integerpromedio : Single
nuevaAnotacion()nuevaNota()registrarAsistencia()rendirPrueba()
Herencia
![Page 20: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/20.jpg)
Herencia - Atributos:
• Una subclase tiene la posibilidad de accesar todos los atributos públicos.
• Una subclase puede tener atributos nuevos.• Una subclase “nieta” hereda los atributos de sus niveles superiores.
Herencia
![Page 21: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/21.jpg)
Herencia - Métodos:
• Un hijo tiene todos los métodos públicos de la superclase.
• Puede agregar nuevos métodos, heredar los de las superclases más alejadas, y hasta redefinir métodos de sus ancestros.
• También existe la posibilidad de que existan métodos estáticos.
Herencia
![Page 22: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/22.jpg)
Jerarquías Múltiples:
• Es posible tener varias jerarquías de herencia, donde un objeto puede pertenecer a más de una jerarquía si es necesario.
Herencia
Persona
Alumno Profesor Admistrativo
Hombre MujerChileno
Extranjero
![Page 23: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/23.jpg)
Herencia Múltiple:
• Una subclase puede ser derivada de más de una superclase.
Herencia
A B
AB
![Page 24: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/24.jpg)
Polimorfismo:
• Significa “muchas formas”.
• Un objeto polimórfico es una entidad, como una variable o argumento de función, a la que se le permite tener valores de tipos diferentes en el curso de la ejecución.
Polimorfismo
![Page 25: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/25.jpg)
•Sobrecarga de métodos.
Polimorfismo:
•Anulación: reemplazo y refinamiento.
•Métodos Virtuales.
Polimorfismo
![Page 26: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/26.jpg)
Sobrecarga de Métodos:
• Cada función tiene una firma compuesta por los parámetros (cantidad, orden, tipo).
• Se pueden encontrar varias funciones con el mismo nombre, pero con diferentes firmas --> sobrecarga de métodos.
• Valor y/o presencia del parámetro definen comportamiento interno de un método.
Polimorfismo
![Page 27: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/27.jpg)
public class Pila {
private int datos[10]; private int tope;
public Stack(){ tope = -1;} public void enqueue(int valor){ if (tope < 9) datos[++tope] = valor;} public void enqueue
(int valor1, int valor2) { if (tope < 8) { datos[++tope] = valor; datos[++tope] = valor;
}}
...}
public class Programa {
public static void main (String args[]) {
Pila p = new Pila();
... if (! p.full()) p.enqueue(3, 4); ... if (! p.full()) p.enqueue(5); ... }}
Polimorfismo
![Page 28: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/28.jpg)
Anulación:
• Se dice que el método de una clase que tiene el mismo nombre que el método de una superclase anula al método de la superclase.
Polimorfismo
Militar
rango
recibirOrden(militar : Militar)recibirOrdenFecha(militar : Militar, fecha : Date)
Teniente General
cabo
recibirOrden(teniente : Teniente)recibirOrden(general : General)recibirOrden(cabo : cabo)recibirOrden(cabo : cabo, fecha : Date)
![Page 29: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/29.jpg)
Anulación:
• Un reemplazo sustituye totalmente el método de la superclase durante la ejecución, es decir, el código en la superclase no será ejecutado cuando se manipulan instancias de la subclase.
Polimorfismo
![Page 30: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/30.jpg)
public class Pila{ private int datos[10]; private int tope;
public Stack(){ tope = -1;} public void enqueue(int valor){ if (tope < 9) datos[++tope] = valor;} public boolean full(){ if (tope == 9) return true; else return false;}...
}
public class Pila2 extends Pila {
...
public void enqueue(int valor) { if (tope < 5) datos[++tope] = valor; }
}
Polimorfismo
![Page 31: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/31.jpg)
Anulación:
• Un refinamiento de método incluye, como parte de su comportamiento, la ejecución del método heredado de la superclase…luego, se preserva y se aumenta el comportamiento de la superclase.
Polimorfismo
![Page 32: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/32.jpg)
public class Pila{ private int datos[10]; private int tope;
public Stack(){ tope = -1;} public void enqueue(int valor){ if (tope < 9) datos[++tope] = valor;} public boolean full(){ if (tope == 9) return true; else return false;}...
}
public class Pila2 extends Pila {
...
public void enqueue(int valor) { super(3);
if (tope < 5) datos[++tope] = valor; }
}
Polimorfismo
![Page 33: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/33.jpg)
Métodos Virtuales:
• Esto se relaciona con el concepto de enlace dinámico que hace un lenguaje orientado al objeto, en lugar del tradicional enlace estático que hacen lenguajes de programación como C.• Su definición indica que se debe preferir la implementación de la instancia, obteniéndose una ejecución no determinista del código.
Polimorfismo
![Page 34: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/34.jpg)
“Debe ser posible utilizar cualquier objeto instancia de una subclase en el lugar de cualquier objeto
instancia de su superclase sin que la semántica del programa escrito en los términos de la superclase se
vea afectado.”
Polimorfismo
• El Principio de Sustitución de Liskow (1987) afirma que:
![Page 35: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/35.jpg)
Zoo Animal
León TigreOso
1
* dormir?
?
Polimorfismo
•Ejemplo: cada animal, pero de forma diferente.
![Page 36: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/36.jpg)
Dormir(){en un árbol}
Dormir(){sobrela espalda}
Dormir(){
sobre el vientre}
Zoo Animal
León TigreOso
1
*
Dormir(){}
Polimorfismo
•Ejemplo: continuación...
![Page 37: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/37.jpg)
Métodos Abstractos:
Polimorfismo
• Un caso especial de método virtual es aquél que no contiene código, el cual se denomina método abstracto.
• Es un método no implementado que obliga a las subclases a sobrecargarlo con una implementación concreta.
![Page 38: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/38.jpg)
public abstract class Persona{ private String Nombre; private String Direccion; private int edad;
public Persona(...){ ...} public abstract int sueldo();
}
public class Empleado extends Persona{ private int cantidad_horas;
... public int sueldo() { ...while...switch... }}
Polimorfismo
public class Externo extends Persona{ private String Empresa;
... public int sueldo() { ...for...switch... }}
![Page 39: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/39.jpg)
Métodos Abstractos:
• En la invocación, siempre se usa la implementación de la clase de la instancia, mediante el enlace dinámico que se hace durante la ejecución del programa.
• Ayuda a la escabilidad del programa frente a la aparición de nuevas subclases en la jerarquía de herencia.
Polimorfismo
![Page 40: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/40.jpg)
Clases Abstractas:
• Una clase abstracta es aquélla que contiene, al menos, un método abstracto.
• Dado que el método abstracto no tiene implementación, una instancia de la clase no podría ejecutar nada al respecto…luego, no es posible tener instancias asociadas a la clase abstracta.
Polimorfismo
![Page 41: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/41.jpg)
Clases Abstractas:
• Si es posible tener referencias a instancias de la clase abstracta, invocando cualquier método de la misma, incluso el método abstracto......pues, en la práctica se reemplazarán por instancias de las subclases (principio de sustitución).
Polimorfismo
![Page 42: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/42.jpg)
Persona
Alumno Profesor Admistrativo
Clase Abstracta en UML
Polimorfismo
![Page 43: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/43.jpg)
Interface:
• Es un conjunto de declaraciones de métodos sin implementación.
• Una clase “implementa” una interface debe especificar los códigos correspondientes a todos los métodos presentes en él.
Interfaces
![Page 44: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/44.jpg)
Interface:
• Si una clase implementa una interface y no provee de una implementación, debe ser declarada como abstracta.
• Una clase puede implementar las interfaces como sean necesarias.
Interfaces
![Page 45: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/45.jpg)
Ornitorrino
MamiferoOviparo
<<Interface>>Interfaces en UML
Interfaces
![Page 46: Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS](https://reader035.vdocuments.net/reader035/viewer/2022062520/5665b4a81a28abb57c92f542/html5/thumbnails/46.jpg)
public class Mamifero{ private String raza; private String especie; private int edad;
public Mamifero(...){ ...} public void vacunar
(String tipo_vacuna){ ...if...while...for
}}
public interface Oviparo { public void poner_huevos (int cantidad); public void empollar_huevos (int semanas);}
Interfaces
public class Ornitorrinco extends Mamifero implements Oviparo{ ... public void poner_huevos (int cantidad) { ...if...while...for... }
public void empollar_huevos (int semanas) { ...for...if... }}