Híper introducción a Objetos

Anuncio
Híper introducción a Objetos
Herman Schinca
Clase 27 y ¡última!
1 de Julio de 2011
Paradigma de Objetos
Al igual que Funcional, se trata de una filosofía,
de un paradigma, no de un lenguaje particular.
Determina cómo comprenderemos el mundo y,
por ende, cómo afrontaremos las soluciones a
nuestros problemas.
De ahora en más nos referiremos a POO
(Programación/Paradigma Orientado a Objetos)
¿Qué es la realidad en POO?
Un conjunto de objetos interactuando o
colaborando entre si a través del pasaje de
mensajes.
¡Todo es un objeto!
¿Y los “mensajes”? También son objetos...
Recuerda que TODO ES UN OBJETO.
¿Qué es un objeto?
Muchos posibles enfoques para definirlo:
1) Una entidad runtime que tiene:
-Identidad
-Estado
-Comportamiento o interfaz
2) Un espacio físico de memoria.
3) Una instancia de una clase (en C++).
Representación vs Interfaz
Dos objetos A y B sólo se pueden comunicar
entre sí mediante sus interfaces.
No conocen su representación interna, es decir,
cómo están construidos.
Luego, la interfaz es quien determina cuál es el
tipo de mi objeto.
Abstracción
Objeto del mundo real ≠ Objeto en POO.
Debemos abstraer cuál es la escencia del objeto
a caracterizar en función del contexto en que
dicho objeto se halle.
Un mismo objeto del mundo real puede tener
distintas representaciones en distintos contextos.
Abstracción: Ejemplo
¿Qué es un avión?
Y en el contexto del viajero errático que toma un
vuelo a Bangladesh ¿qué es un avión?
¿Y en el contexto de un piloto?
Ocultamiento de la información
Los objetos sólo deben conocer las interfaces de
otros objetos sin importar su representación
interna.
Los detalles de implementación deben quedar
acotados dentro del objeto.
Encapsulamiento
Tratar de separar el qué del cómo. Independizar
qué es lo que se pretende hacer de cuál va a ser
la estrategia para lograrlo.
Ejemplo: método sort() de listas en Python. ¿Cuál
estrategia de sorting utiliza? ¿Selection, Merge,
Quick? Sólo sabemos que ordena (de alguna
manera), y eso da flexibilidad a la hora de
cambiar la implementación de sort().
Ventajas de los 3 conceptos
• La implementación se puede cambiar y mejorar
sin afectar su uso.
• Ayuda a modularizar.
• Facilita la comprensión.
• Favorece el reuso.
• Los módulos son más fáciles de entender.
• Y de programar.
• El sistema es más resistente a los cambios.
Objetos en C++
Un objeto es una instancia de una clase
particular, con datos bien definidos.
Una clase es un modelo que define cuáles van a
ser las componentes que caracterizarán a los
objetos creados.
Clases vs Objetos
Una clase es la abstracción de un conjunto de
objetos que comparten ciertas características. Es
una entidad del mundo del diseño, del mundo de
las ideas (diría Platón).
Un objeto es una entidad runtime. Tiene valores
concretos. Es un elemento del conjunto de
objetos que representa su clase.
Ejemplo en C++: Rectángulo
Queremos representar el objeto matemático
“Rectángulo”.
¿Qué características definen un rectángulo?
¿Qué operaciones debería saber responder un
rectángulo?
Representación vs Interfaz en C++
La sección public determinará cuál es la interfaz
de los objetos, cómo se comunicarán con el
mundo.
En private estarán aquellas cosas que
representan al objeto, más detalles de
implementación que no deseamos mostrar.
Constructores
Son los métodos que crean los objetos de la
clase. Típicamente se implementan 3:
-Por defecto
-Por parámetros
-Por copia
Destructores
Así como creábamos arreglos dinámicos pidiendo
y liberando la memoria, los objetos deben crearse
y destruirse.
Pero sólo se destruyen si trabajamos con tipos no
básicos, es decir, pidiendo memoria
dinámicamente para crear al objeto (que es lo que
ocurre en la mayoría de los casos).
Getters y Setters
Como dijimos que no podemos acceder a la
representación interna de los objetos, tenemos
que de alguna manera poder observarlos y
modificarlos.
Observadores = getters.
Modificadores = setters.
Otras operaciones
Son funcionalidades o mensajes que el objeto
sabe realizar pero que no son escenciales, sino
las tenemos el objeto sigue estando bien definido.
Objetos: Mucho más que código
Veamos ejemplos reales de
software ≠ programa.
El mayor esfuerzo no está en la codificación.
¿Cómo encarar proyectos que poseerán cientos
de miles de líneas de código y decenas de
programadores?
Temas avanzados
•Templates (C++)
•Sobrecarga de operadores (C++)
•Métodos friend (C++)
•Herencia (POO)
•Variables y métodos de clase (POO)
•Clases abstractas (POO)
•Diseño de Objetos (POO)
•Patrones de diseño (POO)
•Muchísimos más...
Bibliografía para C++
•Bjarne Stroustrup, The C++ Programming Language, AddisonWesley, 1997.
•Bruce Eckel, Thinking in C++, BinaryThing.com ePublishing
Network, 2000. (En Internet)
•Brian Kernighan y Rob Pike, La Práctica de la Programación,
Prentice-Hall, 2000.
•Stanley Lippman y Josée Lajoie, C++ Primer, Addison Wesley.
Bibliografía para POO
•David West, Object Thinking, Microsoft Press, 2004.
•Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides,
Design Patterns – Elements of Reusable Object-Oriented
Software, Addison Wesley, 1995.
•Bertrand Meyer, Object-Oriented Software Construction,
Prentice Hall, 1997.
•Alan Kay, The Early History of Smalltalk, 1993 (Paper).
Descargar