2. Definición
La Programación Orientada a Objetos (Object Oriented
Programming) es una técnica de programación que establece
una unión muy estrecha entre algoritmos y datos.
Algoritmos + Datos = Objetos
3. Características
Las características principales de los objetos son:
Encapsulación: combinación en una sola estructura los
datos, procedimientos y funciones que los manipulan para
formar un nuevo tipo - el objeto.
Herencia: Definición de un objeto y luego uso del mismo
para construir una jerarquía de objetos descendientes, con
cada descendiente heredando acceso a todo el código y datos
del ancestro.
Polimorfismo: Dada una acción un nombre que es
compartido hacia arriba y abajo en una jerarquía de objetos,
con cada objeto en la jerarquía implementando la acción de
una manera apropiada a sí mismo.
4. Mensajes y métodos
•En la programación orientada a objetos, la acción se indica
mediante la transmisión de un mensaje a un agente (un
objeto) responsable de la acción.
•El mensaje tiene codificada la petición de una acción y se
acompaña de cualquier información adicional (argumentos)
necesaria para llevar a cabo la petición.
•El receptor es el agente al cual se envía el mensaje.
•Si el receptor acepta el mensaje, acepta la responsabilidad de
llevar a cabo la acción indicada.
•En respuesta a un mensaje, el receptor ejecutará algún
método para satisfacer la petición.
5. Diferencia entre mensajes y
procedimientos
La distinción entre el paso de mensajes y la llamada a
procedimiento es que, en el paso de mensaje, hay un receptor
designado, y la interpretación – es decir, la selección del
método que se ejecutará como respuesta al mensaje – puede
diferir con receptores diferentes.
Por lo general, el receptor específico para cualquier mensaje no
se conoce sino hasta el tiempo de ejecución, por lo que la
determinación del método que se debe invocar no puede hacerse
sino hasta entonces.
6. Clases y ejemplares
•Todos los objetos son ejemplares de una clase.
•El método invocado por un objeto en respuesta a un mensaje
queda determinado por la clase del receptor.
•Todos los objetos de una clase dada usan el mismo método
en respuesta a mensajes similares.
7. Herencia
•Las clases se pueden organizar en una estructura de herencia
jerárquica.
•Una subclase heredará atributos de una superclase que esté
más arriba en el árbol.
•Una superclase abstracta es una clase (como mamífero) que
se usa sólo para crear subclases y para la cual no hay
ejemplares directos.
8. Ejemplo de herencia
Objeto material
Animal Planta
Mamífero Flor
Perro Humano Ornitorrinco
Comerciante Artista Dentista
Florista
Relámpago Flo Beth Ken Pepe flores de la abuela
9. Enlace de métodos
•La búsqueda para encontrar un método que pueda invocarse
en respuesta a un mensaje dado empieza con la clase del
receptor.
•Si no se encuentra un método apropiado, se lleva la
búsqueda a la superclase de dicha clase.
•La búsqueda continúa hacia arriba de la cadena de la
superclase hasta que se encuentra un método o se agota la
cadena de la superclase.
•En el primer caso el método se ejecuta; en el último caso, se
emite un mensaje de error.
10. Computación como simulación
El computador es un manejador de datos que sigue un patrón de
instrucciones, se desplaza por la memoria, obtiene de diversas
posiciones, los transforma de alguna manera y devuelve los
resultados a otras posiciones.
Si observamos los valores de los segmentos, podemos determinar
el estado de la máquina o los resultados producidos por el
cómputo.
Aunque el modelo puede ser un cuadro más o menos exacto de lo
que pasa dentro de un computador, nos ayuda muy poco para
entender como resolver problemas por medio de él.
11. Computación como simulación
(cont.)
En el marco orientado a objetos, nunca mencionamos direcciones de
memoria, variables, asignaciones o algún otro de los términos
convencionales de programación.
En su lugar, hablamos de objetos, mensajes y responsabilidad por alguna
acción.
En lugar de un procesador triturador de bits.. que saquea estructuras de
datos, nosotros tenemos un universo de objetos con buen comportamiento
que cortésmente se solicitan entre sí cumplir sus diversos deseos, Dan
Ingalls.
Ver a la computación como si creara un “universo” se asemeja en mucho a
un estilo de simulación de computación llamado “simulación determinada
por eventos discretos”.
12. Manejo de la complejidad
Puesto que la construcción de software es en forma inherente
una actividad de sistemas, esto es, un ejercicio de
interrelaciones complejas, el esfuerzo de comunicación es
grande y pronto domina la disminución de tiempo de trabajo
individual originado por la división. Añadir más hombres
alarga, no acorta, el plan de trabajo.
13. Mecanismos de abstracción
Módulos
1. Uno debe proporcionar al usuario toda la información necesaria para usar correctamente el
módulo, y nada más.
2. Uno debe proporcionar al implantador toda la información necesaria para completarlo, y nada
más.
Los módulos por si mismos ofrecen un método efectivo para la ocultación de información, pero
no nos permite realizar la creación de ejemplares (instantiation), la cual es la capacidad para
hacer copias múltiples de las áreas de datos.
Tipos de datos abstractos
1. Exportar una definición de tipo
2. Proporcionar un conjunto de operaciones que puedan usarse para manipular los ejemplares de
tipo.
3. Proteger los datos asociados con el tipo de tal manera que pueda operar con ellos solo
mediante las operaciones provistas.
4. Crear múltiples ejemplares del tipo.
Objetos: mensajes, herencia y polimorfismo
En el paso de mensajes está implícita la idea de que un mensaje puede variar de acuerdo con los
diferentes objetos. El comportamiento y la respuesta que el mensaje provoca dependerá del
objeto que lo recibe.
14. Tarea #1
Dibuje la jerarquía de dispositivos electrónicos que conozca
(pasivos, activos, de dos patas de 3 patas, lineales, no lineales,
etc.)
De un ejemplo de una jerarquía de la vida diaria similar a la
vista en clase.
Dibuje una jerarquía de figuras geométricas (cuadrado,
triángulo, pentágono, trapecio, etc.)
Dibuje una jerarquía de vehículos para pasajeros (bicicleta,
motocicleta, automóvil, etc.).
15. Tarjetas CRC
Las tarjetas CRC (Class-Responsability-Collaboration) Son utilizadas para
representar clases en el proceso de diseño.
sirven para determinar que clases se necesitan y como interactúan
15 cm
Colaboradores
Nombre de Clase
Responsabilidades
10 cm
16. Ejemplo
Controlador
Vista
Modelo
Dibuja el modelo
Vista
Controlador
Transforma
Modelo
coordenadas Interpreta entrada de
usuario
Distribuye control
Modelo
Mantiene
información del
problema
Envía notificación
de cambios
17. Reglas para los nombres
•Use nombres pronunciables. Como regla práctica, si no se
puede leer el nombre en voz alta, no es un buen nombre.
•Use mayúsculas o subrayado para marcar el principio de una
nueva palabra dentro del nombre.
•Examine con cuidado las abreviaturas.
•No use dígitos dentro de un nombre, se pueden confundir con
letras (l y 1, O y 0, etc.)
•Nombre las variables y funciones que manejen valores
booleanos de tal forma que describan claramente la
interpretación de un valor falso o verdadero.
18. Categorías de las clases
Clases de manejadores de datos, de datos o de estado. Son
clases cuya responsabilidad principal es mantener
información de datos o de estado de un genero o de otro.
Pozos de datos o fuentes de datos. Clases que generan datos
o que aceptan datos y los procesan.
Clase de vista u observadoras. Presentan la información en
un dispositivo de salida.
Clases auxiliares o de ayuda. Guardan poca o ninguna
información, pero asisten en la ejecución de tareas complejas.
19. Diseño por escenarios
Iniciar con las clases más obvias y necesarias
Se simulan escenarios jugando al “que tal si”.
Cada diseñador es responsable de una o más clases
Se levantan las clases activas
El control se pasa moviendo una tarjeta a otra
Las tarjetas relacionadas se agrupan
Se identifica cada acción y se hace responsable a algún objeto
Se añade la responsabilidad a ese objeto
Se prueban más escenarios
20. Case de ejemplo: Cajero automático
Se desea desarrollar software para un cajero automático
La primera clase es LectorDeTarjetas que muestra el mensaje de bienvenida y lee la
banda magnética.
Cuando se introduce el NIP, se lo pasa a VerificadorDeNip
VerificadorDeNip pasa el número de cuenta a ManejadorDeCuenta para confirmar
cuenta y NIP. Si los números coinciden, VerificadorDeNip regresa verdadero, sino
regresa falso.
Si todo está correcto LectorDeTarjetas pasa el control a SelectorDeActividad.
21. Colaboradores
LectorDeTarjetas VerificadorDeNip
SelectorDeActividad
Muestre mensaje de
bienvenida, espere tarjeta
Colaboradores
Pida a VerificadorDeNip que ManejadorDeCuenta
compruebe validez
Llame al SelectorDeActividad Verificar validez de cuenta;
devuelva número NIP
Devuelva tarjeta al usuario
Verifique información de
retiro/depósito
Colaboradores
VerificadorDeNip ManejadorDeCuent
a
Reciba número NIP de Colaboradores
ManejadorDeCuenta SelectorDeActividad ManejadorDeDepósi
Presente ventana de solicitud tos
de NIP Muestre menú de actividades
ManejadorDeRetiros
Reciba número NIP del usuario Espere selección de usuario
Compare números NIP; Llame al manejador de
devuelva el resultado transacción apropiado
22. Colaboradores
ManejadorDeRetiros ManejadorDeCuent
a
Pregunte al usuario la cantidad
DistribuidorDeEfecti
a retirar
vo
Verifique la cantidad con
ManejadorDeCuenta
Diga al DistribuidorDeEfectivo
que descargue
Colaboradores
CajaElectrónica ManejadorDeRetiros
ManejadorDeDispos
Dar efectivo
itivos
Dar sobre de depósito con
indicación de hora
Recuperar sobre de depósito
23. Manejadores de datos
Cualquier valor al que se tenga acceso o que pueda ser modificado
ampliamente, o que vaya a existir por un periodo significativo, debe ser
manejado. Es decir, una y solo una clase debe tener la responsabilidad de
las acciones tomadas para consultar o alterar los valores. Todas las demás
clases que necesiten tener los valores deben hacer solicitudes al manejador
para tales acciones, más que lograr el acceso de datos por si mismas.
El acceso a datos debe quedar tan restringido como sea posible. Si una
clase no necesita en absoluto el acceso a cierta parte de la información
para llevar a cabo sus tareas, no debe buscar y tener tal acceso.
Una clase debe tener acceso a todos los valores de datos que necesite para
llevar a cabo sus responsabilidades, y solo a ellos.
24. Ejemplo
discusión inapropiada entre manejadores
ManejadorDeRetiros ManejadorDeCuenta
¿Cuál es el saldo actual? El saldo actual es $1,756.09
(Hmmm. Si resto $200 a esa
cantidad todavía obtengo un
valor positivo. De acuerdo)
Por favor ajusta el saldo a $1,556.09
discusión apropiada entre manejadores
ManejadorDeRetiros ManejadorDeCuenta
¿Puede retirar el cliente $200? (Hmmm. Si resto $200 a ese
saldo todavía obtengo un
valor positivo)
Si
De acuerdo. Por favor registra el retiro
25. Tarea #2
Describa las responsabilidades de una organización que comprenda al
menos seis tipos de individuos. Ejemplos de una organización son un
escuela (estudiantes, profesores, director, conserje), un negocio (secretaria,
gerente, trabajadores) y un club (presidente, vicepresidente, miembros).
Para cada clase de individuo, describa las responsabilidades y los
colaboradores.
Considere un juego común. Describa un sistema de software que interactúe
con el usuario para jugarlo, (dados, solitario, damas, turista, etc.)
Para cada uno de los pares siguientes, diga si la relación es es-un o tiene-
un.
Casa – techo
Conserje – empleado
Ratón digital – dispositivo de entrada
Menú – ventana
Conjunto – colección
26. Herencia
Tipos de relaciones: es-un tiene-un
Herencia Composición
Transporte
Avión Vehículo
Puerta
Motor
Camión Automóvil
Capota
Llanta