Download Introducción y Conceptos

Document related concepts

Polimorfismo (informática) wikipedia , lookup

Scala (lenguaje de programación) wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Common Lisp Object System wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Transcript
Programación
Orientada a Objetos
INTRODUCCIÓN Y
CONCEPTOS
Programación OO
• Vista Macro:
– La programación orientada a objetos trata
sobre el desarrollo de software utilizando un
paradigma que descompone el problema en
objetos independientes
• Vista Micro:
– La programación orientada a objetos es
utilizar un lenguaje orientado a objetos para
implementar soluciones de software
2
Vista Macro
• Análisis y Diseño Orientado a
Objetos (UML)
• Reuso
• Diseño basado en Patrones
• Marcos de Trabajo (Frameworks)
• Componentes
3
Vista Micro
•
•
•
•
Clases y Objetos
Mensajes y Métodos
Jerarquía de Clases y Herencia
Encapsulación y Ocultamiento de
Información
• Unión de Métodos y Polimorfismo
• Lenguajes
4
¿Por qué la POO es Popular?
• Similaridad con la forma de pensar acerca
de los problemas en la vida real natural
• Es muy escalable, desde problemas
triviales hasta sistemas muy complejos
• El uso de librerías permite el desarrollo de
aplicaciones en muchos campos
reuso
5
Lenguajes y Pensamiento
• Una teoría muy aceptada entre los lingüistas
asevera que el lenguaje que hablamos
influencia directamente la manera en la cual
vemos el mundo y expresamos nuestros
pensamientos.
• Los esquimales son un ejemplo, su idioma
tienes muchas palabras para describir los
diversos tipos de nieve. Es muy fácil expresar
situaciones complejas relacionadas con nieve
en ese lenguaje que en un lenguaje menos
adaptado para eso.
• Esto se aplica tanto a lenguajes naturales como
6
a lenguajes computacionales.
Lenguajes de Programación y
Solución de Problemas
Ejemplo: análisis de una secuencia de DNA
• Las secuencias de DNA es representada
como un vector de valores enteros:
ACTCGGATCTTGCATTTCGGCAATTGG
…..
• Encontrar si un patrón de largo M (donde
M es pequeño y fijo) esta repetido en una
secuencia de DNA de longitud N (siendo
N muy muy largo)
7
Solución en Fortran
DO 10 I = 1, N-M
DO 10 J = 1, N-M
FOUND= .TRUE.
DO 20 K = 1, M
IF X[I+K-1] .NE. X[J+K-1] THEN FOUND =
.FALSE.
IF FOUND THEN ….
8
Solución en APL
ACTCCTCGATCCATTTCGGCAATTGG….
Reorganizar en una matriz N x M
Ordenar la matriz por columnas
Buscar filas adyacentes iguales
ACTCCTC 1-7
ACTCCTC
CTCCTCG 2-8
CCTCGAT
TCCTCGA 3-9
CGATCCA
CCTCGAT 4-10
CTCCTCG
CTCGATC 5-11
CTCGATC
TCGATCC 6-12
TCCTCGA
CGATCCA 7-13
TCGATCC
9
Comparación de las 2 Soluciones
• Los programadores de Fortran
(procedimentales) piensan en términos de
lazos. La solución en Fortran es
extremadamente lenta O(M x N2)
• El programador de APL (funcional) piensa en
términos de manipulación de secuencias, el
ordenamiento es algo interno del lenguaje y los
lazos no existen. La solución en APL es mas
rápida O(M x NlogN) a pesar de que APL no es
un lenguaje más eficiente que Fortran
10
Conjetura de Church e Hipótesis
de Safir-Worf
• Hipótesis Safir-Worf: afirma que un individuo utilizando
un lenguaje dado puede tener ideas o pensamientos
que no pueden ser traducidas o entendidas por un
individuo que usa otro lenguaje.
• Conjetura de Church: cualquier programa puede ser
escrito por una máquina de Turing, o sea que cualquier
programa puede ser escrito en cualquier lenguaje de
programación.
• Si bien Church demuestra su conjetura, un nuevo
lenguaje puede no ofrecer mayor poder de computo
pero puede proveer una manera más fácil o natural
para resolver cierto tipos de problemas.
11
Soluciones OO y Lenguajes OO
• El uso efectivo de los principios de la orientación a
objetos requiere que el programador vea el mundo de
una manera diferente
• El uso de un lenguaje orientado a objetos simplifica el
desarrollo de soluciones orientadas a objetos.
• El uso de un lenguaje orientado a objetos no convierte
al individuo en un programador orientado a objetos.
“programas de Fortran pueden ser escritos en cualquier
lenguaje”
12
¿Un nuevo paradigma?
• Paradigma = conjunto de teorías, estándares y
métodos que juntos representan maneras de
organizar el conocimiento y ver el mundo.
• En la ciencia una revolución ocurre cuando un
paradigma viejo es reexaminado, rechazado y
remplazado por uno nuevo
• Paradigma de Programación = una manera de
conceptuar que significa computar y como
estructurar y organizar las tareas que deben ser
llevadas a cabo por una computadora
13
POO: Una nueva manera de ver el
mundo
“ Juan quiere mandar flores a su amiga
Ana que vive en otra ciudad. Debido a la
distancia Juan no puede llevar las flores
directamente a Ana. Juan acude a Pedro,
un florista local, y le da el número y tipo
de flores que quiere enviarle a Ana y su
dirección. Juan puede estar seguro que
las flores serán entregadas a Ana. ”
14
Agentes, Responsabilidad,
Mensajes y Métodos
• Juan encuentra un agente apropiado (Pedro)
• Y le envía un mensaje que contiene una
petición.
• Es la responsabilidad de Pedro el satisfacer esa
petición.
• Existe algún método (conjunto de operaciones)
usadas por Pedro para entregar las flores.
• Juan no necesita conocer el método particular
que Pedro utilizará, esa información esta oculta.
15
POO: el Principio General
• Un programa orientado a objetos esta estructurado
como una comunidad de agentes que interactúan entre
si llamados objetos.
• Las acciones son iniciadas por la transmisión de
mensajes a un agente (un objeto).
• El mensaje codifica un requerimiento de acción y es
acompañado por información adicional (argumentos)
necesaria para llevar a cabo el requerimiento.
• El receptor es el agente al cual el mensajes es enviado.
Si el receptor acepta el mensaje, acepta la
responsabilidad de llevar a cabo la acción solicitada.
• En respuesta a un mensajes el receptor ejecutará
algún método para satisfacer el requerimiento.
16
Unión de Métodos y Polimorfismo
• Si Juan pidiera a María, otra florista, que
envíe flores a Ana por su cumpleaños,
ella podría usar un método diferente al
usado por Pedro.
• El método que se ejecuta en respuesta a
un mensaje depende del receptor del
mensaje.
• Que métodos diferentes se ejecuten en
respuesta al mismo mensaje se conoce
como polimorfismo.
17
Enviar Mensajes vs. Llamadas a
Procedimientos
• Un mensaje tiene un receptor designado (algún
objeto)
• La interpretación del mensaje, ej.: el método
usado en respuesta a un mensaje es
determinado por el receptor y pude variar entre
diferentes receptores.
• Muy frecuentemente el receptor real no es
conocido sino hasta tiempo de ejecución. A
esto se lo conoce como unión tardía o dinámica
entre un mensaje y el fragmento de código
(método) utilizado para responder al mensaje. 18
Responsabilidad y Abstracción
• Analizar un problema en términos de
responsabilidades incrementa el nivel de
abstracción y permite una mayor independencia
entre agentes.
• La conjunto completo de responsabilidades
asociadas con un objeto se describes con el
término protocolo o interfaz.
• Un receptor acepta la responsabilidad de
responder a un mensaje. El que envía no
necesita conocer los detalles de método usado.
Esta es una forma estándar y poderosa de
abstracción conocida como ocultamiento de
19
información.
Clases e Instancias
• A pesar de que Juan no conoce a Pedro muy bien, el
tiene una idea aproximada de como tratar y que pedir a
Pedro. Juan es capaz de hacer ciertas asunciones
basado en su experiencia previa con otros floristas. El
espera que Fred, siendo una instancia de la categoría
de floristas, se ajuste a ese patrón.
• Todos los objetos son instancias de una clase. El
método invocado por un objeto para responder a un
mensaje es determinado por su clase.
• Todos los objetos de una misma clase usan el mismo
método para responder al mismo mensaje.
20
Jerarquía de clases y Herencia
• Juan tiene más información acerca de Pedro, no
necesariamente porque es un florista, sino porque
Pedro es un vendedor, un humano, un mamífero, un
animal y un objeto material.
• El principio que afirma que el conocimiento de una
categoría más general es también aplicable a una
categoría más específica es llamado herencia.
• Las clases pueden ser organizadas dentro de una
estructura jerárquica. Una clase hija (o subclase)
hereda los atributos de su clase padre (superclase).
• Una clase abstracta existe solamente para agrupar
subclases.
21
Categorías de Pedro
Objeto Material
Animal
Mamífero
Humano
Vendedor
Florista
Pedro
22
Jerarquía de la clase Objeto
Material
Objeto Material
Animal
Planta
Mamífero
Flores
Perro
Sultán
Humano
Vendedor
Ornitorrinco
Artista
Florista
Pintor
Pedro
Luis
Fil
Tulipanes
Tulipán 1
Tulipán 2
Tulipán 3
23
Unión de Métodos, Sobrescritura
y Excepciones
• Fil es un ornitorrinco y por lo tanto un mamífero. Los
Mamíferos dan a luz crías vivas, pero Fil no, ella pone
huevos. Esta es una excepción a una regla general.
• La información contenida en una subclase pude
sobrescribir a la información heredada de una clase
padre.
• La búsqueda de un método en respuesta a un mensaje
comienza en la clase del receptor y continua hacia
arriba hacia la clase de su padre.
• Cuando un método con el mismo nombre esta
disponible en una clase más alta en la jerarquía, se
dice que el método esta sobrescrito.
24
POO y como evitar la asignación
infinita
“ En vez de procesadores procesando estructuras de
datos, ahora tenemos un universo de objetos bien
comportados que se preguntan cortesmente unos a
otros para llevar a cabo sus diferentes deseos.”
• En algún punto algún objeto debe llevar a cabo algún
trabajo en vez de solamente pasar requerimientos a
otros.
• Lenguajes mixtos (C++, CLOS) escriben estos métodos
utilizando su lenguaje base.
• Lenguajes OO puros (Smalltalk, Java) tienen
operaciones primitivas o nativas.
25
Resumen (por Alan Kay)
• Todo es un objeto
• El computo es llevado a cabo por objetos
comunicándose entre ellos, pidiendo a los otros
realizar una acción.
• Los objetos se comunican enviando y
recibiendo mensajes. Un mensaje es una
petición de una acción junto con cualquier
argumento necesario para completar la tarea.
• Cada objeto tiene su propia memoria que
consiste de otros objetos.
26
Resumen (cont)
• Cada objeto es una instancia de una clase. Una
clase representa un agrupamiento de objetos
similares.
• La clase es un repositorio del comportamiento
asociado con un objeto. Esto es, todos los objetos
que son instancias de la misma clase llevan a
cabo las mismas acciones.
• Las clases están organizadas en una estructura de
árbol llamada de herencia jerárquica. La memoria
y el comportamiento asociadas con una clase son
automáticamente disponibles para clases que son
27
sus descendientes.
Manejando la Complejidad
• La complejidad de los proyectos de
programación es no lineal
– Dos programadores no pueden hacer en un mes lo
que uno puede hacer en 2 meses.
– Añadir más programadores a un proyecto
generalmente alarga, no acorta, el cronograma.
• La interconexión, la dependencia de una
porción de código de otra porción de código es
responsable de este fenómeno.
• Los mecanismo de abstracción tratan de
manejar esto. Las técnicas orientadas a
objetos ofrecen son una avance en esta
28
dirección.
Abstracción
• Los mecanismos de abstracción son técnicas
para crear, entender y administrar sistemas
complejos.
• La abstracción es la supresión u ocultamiento
de ciertos detalles de un proceso o artefacto
para mostrar más claramente otros aspectos,
detalles o estructuras.
• A través de la abstracción uno construye un
modelo del sistema real.
29
Capas de abstracción en la POO
• En el nivel más alto, un programa es visto como una
comunidad de objetos cooperativos. Cada objeto en
esta comunidad provee servicios que pueden ser
usados por otros miembros. A este nivel las
características importantes son los servicios
proporcionados por cada objeto y las líneas de
cooperación y comunicación entre ellos.
• El siguiente nivel de abstracción permite que grupos de
objetos que trabajan juntos puedan ser agrupados en
una unidad (paquetes, name spaces, unidades)
permitiendo que algunos nombres sean expuestos al
mundo exterior a la unidad, mientras otros permanecen
ocultos.
30
Capas de abstracción en la POO
• Los siguientes 2 niveles de abstracción
manejan la interacción entre 2 objetos
individuales, donde uno (el cliente) usa los
servicios de otro (el servidor)
– El servidor anuncia los servicios que pude proveer a
los clientes a través de una interfaz, el cliente utiliza
esta interfaz.
– El servidor provee una implementación concreta
para esta interfaz.
• El último nivel de abstracción considera una
tarea en aislamiento. Ej.: los pasos seguidos
para implementar un método.
31
Mecanismos de Abstracción en
los Lenguajes
• Procedimientos y Funciones (centrado en
funciones)
+ ocultamiento de información por el detalle del
comportamiento
- Ocultamiento de información por el detalle de los
datos
- encapsulasión
• Módulos y Paquetes (centrado en datos)
+ ocultamiento de información
+ encapsulasión
- La instanciación no es siempre soportada
• Tipo de Datos Abstractos
+ separa la interfase de la implementación
32
Mecanismos de Abstracción en
Lenguajes OO
• Las clases son Tipos de Datos Abstractos
centrados en servicios
• El paso de mensajes y la unión de métodos
tienen como consecuencia el polimorfismo que
lleva a un código más legible.
• Las Jerarquías de Clases y la Herencia llevan a
la compartición de código, lo que resulta en
aumento de la funcionalidad y reducción del
tamaño del código.
• La herencia y el polimorfismo ayudan al trabajo
con el código compartido.
33
Desarrollo de Software
Orientado a Objetos
• El desarrollo de software orientado objeto NO trata
sobre la sintaxis de lenguajes de programación.
• El desarrollo de software orientado a objetos trata
sobre las técnicas de diseño basadas en la
determinación y delegación de responsabilidades.
• Responsabilidad implica no-interferencia, corta o
reduce los enlaces entre diferentes objetos que
dependen en detalles de su implementación.
• Va más allá del ocultamiento de información y la
encapsulación cuando trata de la programación de
sistemas grandes.
34
Programando lo pequeño vs.
Programando lo grande
• Código desarrollado por
un solo programador o
por un grupo pequeño de
programadores.
• Cada individuo entiende
todos los aspectos del
proyecto.
• El esfuerzo principal es
diseñar y desarrollar
algoritmos para tratar
con el problema
• El sistema de
desarrollado por un
equipo numeroso.
• Ningún individuo es
responsable por el
problema total o entiendo
todos sus aspectos.
• El esfuerzo principal es
la administración de los
detalles y de la
comunicación entre las
diferentes porciones del
proyecto.
35