Programación Orientada Objetos
Programación Orientada Objetos
Objetos
Algorítmica y Programación II
Terminología
• Cada objeto creado en un programa es una instancia de una clase.
• Cada clase presenta al mundo exterior una visión concisa y
consistente de los objetos que son instancias de esta clase, sin entrar
en demasiados detalles innecesarios ni dar acceso a otros al
funcionamiento interno de los objetos.
• La definición de clase especifica típicamente variables de instancia,
también conocidas como miembros de datos, que el objeto contiene,
así como los métodos, también conocidas como funciones miembro,
que los objetos pueden ejecutar.
Metas
• Robustez
• Queremos que el software sea capaz de manejar entradas
inesperadas que no están explícitamente definidas para su aplicación.
• Adaptabilidad
• El software debe poder evolucionar con el tiempo en respuesta a las
condiciones cambiantes de su entorno. (hardware, SO, etc.)
• Reusabilidad
• El mismo código debe ser utilizable como un componente de
diferentes sistemas en diversas aplicaciones.
Tipos Abstractos de Datos
• Abstracción es representar un sistema por sus partes más fundamentales.
• La aplicación del paradigma de abstracción al diseño de estructuras de
datos da lugar a tipos de datos abstractos (TAD) abstract data types
(ADTs).
• Un TAD es un modelo de una estructuras de datos que especifica el tipo de
dato almacenado, las operaciones soportadas por él, y los tipos de
parámetros de las operaciones.
• Un TAD especifica qué operaciones hace, pero no como las hace.
• El conjunto colectivo de comportamientos respaldados por un TAD es su
interfaz pública.
Principios de Diseño Orientado a Objetos
• Abstracción
• Encapsulamiento
• Modularidad
Patrones de Diseño
• Clase Cabra extiende Object y agrega una variable de instancia de cola y métodos: leche() y
saltar().
• Clase Pig extiende Object y agrega una variable de instancia de nariz y métodos comer(comida) y
revolcar().
• Clase Caballo extiende Object y agrega variables de instancia de altura y color, y los métodos
correr() y saltar().
• Clase Carrera extiende Caballo y agrega un método carrera().
• La clase Ecuestre extiende el Caballo y agrega la variable de instancia peso y esEntrenado, y los
métodos trotar() y isEntrenado().
Considere la herencia de las clases anterior, y sea d una variable de objeto de tipo Caballo. Si d se
refiere a un objeto real de tipo Ecuestre, ¿se puede convertir a la clase Carrera? ¿Por qué sí o por
qué no?
Genéricos
• Java incluye soporte para escribir clases genéricas y métodos que
pueden operar en una variedad de tipos de datos, mientras que a
menudo se evita la necesidad de conversiones explícitas.
• El marco (framework) de los genéricos nos permite definir una clase
en términos de un conjunto de parámetros de tipo formales, que
luego se pueden usar como el tipo declarado para variables,
parámetros y valores de retorno dentro de la definición de la clase.
• Esos parámetros de tipo formales se especifican posteriormente
cuando se utiliza la clase genérica como un tipo en otro lugar en un
programa.
Sintáxis para Genéricos
• Los tipos pueden declararse utilizando nombres genéricos :