Diseño y Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Aplicación del paradigma orientado a objetos
HERENCIA.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Clases y Objetos en Java
Unidad Didáctica 11 Reutilización Versión 1.0.0
Herencia y Clases Abstractas Reutilización de código y código genérico
Programación Avanzada
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Polimorfismo en C++, ligado dinámico y Métodos Virtuales
Herencia y Clases Abstractas
Programación orientada a objetos
Diseño y Programación Orientada a Objetos
Herencia Implementación en Java.
Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Figura Rectangulo Elipse Cuadrado Circulo area (): double
Clases en C++ Agustín J. González ELO329.
Fundamentos de la programación orientada a objetos
Diseño y Programación Orientada a Objetos
Medio de tele-comunicación
Clases y Objetos en Java
Definición y Conversión de datos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Diseño y Programación Orientada a Objetos
Diseño y Programación Orientada a Objetos
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Programación orientada a objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Diseño y Programación Orientada a Objetos
Sonia Rueda Herencia y Polimorfismo
Sonia Rueda Herencia y Polimorfismo
Clases y Objetos en Java
Polimorfismo y Métodos Virtuales
Tema 3. Lenguaje unificado de modelado UML
Programación Orientada a Objetos I Unidad 4 Relaciones entre clases: herencia.
Herencia Agustín J. González ELO329.
Herencia en C#.
HERENCIA.
Clases en C++ Agustín J. González ELO329.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Programación Orientada a Objetos
Ingeniero en Computación José Alfredo Cobián Campos
Universidad Nacional de Colombia - Leguajes de Programación
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Características Generales y Entornos de Desarrollo
Programación orientada a objetos en Visual Basic .NET
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Herencia en C++ Agustín J. González ELO329.
Tópicos Avanzados de Programación (TAP3501)
Clases en C++ Agustín J. González ELO329.
Herencia en C++ Agustín J. González ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Tema 5 H erencia. La herencia es una forma de reutilización de software en la que las clases se crean incorporando los datos (atributos) y el comportamiento.
Herencia Agustín J. González ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Herencia en C++ Agustín J. González ELO329.
Clases abstractas e interfaces
Clases y Objetos en Java
Transcripción de la presentación:

Diseño y Programación Orientada a Objetos Conferencia # 7 Herencia TEMA # 3: Herencia y Polimorfimo Facultad Ing. Informática ISPJAE

Contenido 1ra parte Herencia Relaciones que la definen Representación en UML Implementación en Java

Objetos de una categoría Categorías de objetos Animal Mamífero Cánido Perro Lobo Persona Comerciante Florista Animal Mamífero Cánido Perro Lobo Persona Comerciante Florista iguales características igual comportamiento Objetos de una categoría

Relaciones de herencia Es–un o es-un-tipo-de: presente entre dos conceptos cuando uno es un ejemplar especializado del otro. Ejemplos: Un Perro es un Mamífero Un Círculo es una Figura Generalización/especialización

Herencia Forma de reutilización del software. Se crean nuevas clases (hijas, derivadas) a partir de clases existentes (base, ancestros). A través de la herencia las clases derivadas "heredan", o sea, tienen acceso a los datos y comporta-miento de la clase base.

Reperesentación en UML B C D Generalaización/especialización Propiedades No conmutativa Transitiva Extensiva

Herencia  reutilización clase derivada hereda todas las características y comportamiento, datos y métodos, de sus ancestros directos e indirectos. clase derivada puede agregar nuevas características y comportamiento, datos y métodos. clase derivada puede redefinir el comportamiento, métodos.

Ejemplo Persona nombre NI nombre() nombre NI dpto salario nombre() … Administrador nombre NI dpto salario nombre() … horario horario() Estudiante carrera nombre NI notas nombre() … Profesor nombre dpto salario NI categoría nombre() … carrera Estudiante notas … Administrador dpto salario salario() carrera() Profesor categoría categ() horario horario()

Ejemplo Persona nombre Trabajador NI dpto nombre() salario salario() … carrera Estudiante notas … Profesor categoría categ() Administrador horario horario() carrera()

Implementación en Java class Object Clase predefinida Padre de toda la jerarquía de clases Ancestro directo o indirecto de todas las clases

Implementación en Java public class Person { private String name; private String NI; public Person(String name,String NI){.. public String getName(){.. public String getNI(){.. public void setName(String name){.. public void setNI(String NI){.. public int age(){.. }

public class Student extends Person { private String course; private IntArray marks; public Student(String name, String NI, String course) {.. public String getCourse(){.. public void setCourse(String course){.. public void addMark(int mark){.. public float average(){.. }

public class Worker extends Person { private String depart; private float salary; public Worker(String name, String NI, String dpto, float salary) {.. public String getDpto(){.. public void setDpto(String course){.. public String getSalary(){.. public void setSalary(float salary){.. }

} public class Teacher extends Worker { private String category; public Teacher(String name, String NI, String depart, float salary, String category) {.. public String getCategory(){.. public void setCategory(String category){.. }

public class Admin extends Worker { private String schedule; public Admin(String name, String NI, String depart, float salary, String schedule) {.. public String getSchedule(){.. public void setSchedule(String schedule){.. }

Construcción de objetos de clases derivadas public Worker(String name, String NI, String depart, float salary) { super(name,NI); this.depart= depart; this.salary= salary; } Person(…) ¿Teacher(…)?

Otro uso de super Dato Método super.miembro Para acceder a la versión heredada de un miembro redefinido. Sintaxis: super.miembro Dato Método

Miembros protegidos public class Worker extends Person { protected Pueden ser accedidos por la clase y sus derivadas, directas e indirectas. public class Worker extends Person { private String depart; protected float salary; … }

Miembros protegidos public class Teacher extends Worker { … public void incExperience(float amount) { salary= salary + amount; } …

Visibilidad en jerarquías de clases Los atributos y métodos se heredan con el mismo nivel de visibilidad que fueron declarados en la clase padre. Este nivel de visibilidad puede ser aumentado, a través de la redefinición pero nunca restringido.

Mecanismo del compilador para responder a un mensaje

Ejemplo Object Person Worker name Student dpto NI salary marks getName() Worker dpto salary getSalary() … course Student marks … getCourse() Teacher category getCateg() Admin schedule getSchedule() Admin a, b; a = new Admin(..) …a.getName()… b= a.clone();

Contenido 2da parte Otras relaciones entre clases. Compatibilidad de tipos para la asignación. Conversión implícita o hacia arriba Conversión explícita o hacia abajo

Otras relaciones … Utiliza-un: cuando un objeto colabora con otro para llevar a cabo algunas funciones. En la implementación, no es más que funciones miembros del objeto cliente, que acceden a un objeto servidor al cual se le hacen solicitudes en el cuerpo de la función. Ejemplos: Persona utiliza un automóvil Estudiante utiliza una PC

Otras relaciones … Conoce-un o conoce-a: cuando un objeto, en cualquier momento de su vida, conoce de la existencia de otro objeto de otra clase. En la implementación, no es más que un miembro del objeto conocedor, que “apunta” al objeto conocido. Ejemplos: Estudiante conoce a su(s) profesor(es) Jugada, Jugador conocen a reloj.

“Utiliza-un” y “Conoce-a” B 1 Jugada Reloj Solicita hora 1

Compatibilidad de tipos para la asignación

Conversión implícita o hacia arriba Herencia  “Es-un” Instancia de clase derivada es una instancia de clase base Una instancia es compatible para la asig-nación, con cualquiera de sus ancestros. Una instancia puede referenciar una instancia de cualquier tipo descendiente. Lo contrario no es posible, una instancia de clase base nunca es una instancia de clase derivada.

“Donde cabe un padre cabe cualquiera de sus hijos” Ejemplo Person p; Student s= new Student(“Juan”, “80010111111”, “DPOO”); p= s; “Donde cabe un padre cabe cualquiera de sus hijos”

Comversión explícita o hacia abajo s= p ERROR!!! s= (Student)p; TypeCast

Utilidad de la conversión hacia arriba public class PersonCollection { private Person[] persons; private int count; …

Utilidad de la conversión hacia arriba public boolean add(Person person) { … persons[count++]= person; }

public class Controler { private PersonCollection persons; … public boolean addAdmin(String name;..) { Admin a= new Admin(name,…); persons.add(a); } public boolean addTeacher(String name;..) { Teacher t= new Teacher(name,…); persons.add(t); } }

Utilidad de la conversión hacia arriba public int find(String name) { … if(persons[i].getName().equalsIgnoreCase (name)); … } Instancias de clases derivadas tratadas como instancias de clase base

Operador instanceof Permite conocer de qué tipo de clase es un objeto. Sintaxis <instancia> instanceof <clase>

Operador instanceof public class PersonCollection { private Person[] persons; … public int countAdmin() { int c= 0; for (int i= 0;i < count; i++) if (persons[i] instanceof Admin) c++; return c; } }

Conclusiones Herencia: mecanismo de la POO que garantiza el mayor nivel de reusabilidad de código. Permite implementar nuevas clases en función de otras ya existentes. Al diseñar los modelos de clases: analizar cada uno de los conceptos del problema buscando características y comportamien-to común, para crear clases ancestrales.

Conclusiones Muchas veces se diseñan clases de las cuales no existirán ejemplares, y cuya única razón de ser es aportar caracterís-ticas y comportamiento para la herencia.   Clases descendientes que no incorporan nuevo comportamiento ni redefinen el comportamiento heredado de sus ancestros son indeseadas.

Motivación Person name NI getName() Worker dpto salary course Student marks … getCourse() getSalary() pay() Teacher category getCateg() Admin hour getHour() Person p; p = new Admin(..) ¿…p.pay()…?

Estudio Independiente Bibliografía: Texto básico. Capítulo 6: Reusing Classes. Inheritance syntax. Pág 261. Initializing the base class. Pág 264 Combining composition and inheritance. Pág 267. protected. Pág 276.

Estudio Independiente Caso de estudio: Control de las publicaciones de una biblioteca.