Вы находитесь на странице: 1из 22

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, Addison-


Wesley, 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).

Вам также может понравиться