1 Pensando Orientado a Objetos Agustín J. González ELO-329: Diseño y Programación Orientados a Objetos 1er. Sem. 2003.

Slides:



Advertisements
Presentaciones similares
INTELIGENCIA ARTIFICIAL
Advertisements

Curso de Java Capitulo 7: Continuación Poo Profesor:
ANÁLISIS DE REQUERIMIENTOS
Lenguaje de programación Java
UML para programadores Java
Programación Orientada a Objetos
1 Pensando OO ELO329: Diseño y programación orientados a objetos Agustín J. González 1s09.
Resolución de Problemas Algoritmos y Programación
Arquitectura CLARO-TECNOTREE
Introducción a la Programación
DSOO - María Eugenia Valencia
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
POO Santiago, Mayo 2004 TRABAJO DE INVESTIGACIÓN POO Programación Orientada a Objetos CENAFOM Carolina Bravo V. Jaime Jofré B.
CONCEPTOS Y PRINCIPIOS ORIENTADOS A OBJETOS
GENERACIONES DE LENGUAJES DE PROGRAMACIÓN
UNIVERSIDAD LATINA (UNILA) INTRODUCCION A LA PROGRAMACIÓN
Programación 1 Introducción
Aplicación del paradigma orientado a objetos
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
PROGRAMACION ORIENTADA A OBJETOS
Algoritmos y Estructuras de Datos
UNIDAD I. INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS EN JAVA.
METODOLOGIA DE LA PROGRAMACION
Abstracción de los datos y Orientación a Objeto Clase 13.
Fundamentos de Programación
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Introducción a la programación Orientada a objetos
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Direcciones físicas y direcciones virtuales (lógicas)
VHDL.
UNIDAD I Conceptos Básicos.
Semana 5 Subprogramas..
Ingeniería de Software
Introducción a la POO • ¿Qué es la programación orientada a objets (POO)? – Un “paradigma” de programación – Una forma de pensar acerca de los problemas.
DISEÑO DE SOFTWARE 1ª. Parte
Material de apoyo Unidad 4 Estructura de datos
1 Diseño Orientado a Objetos Agustín J. González ELO-329: Diseño y Programación Orientados a Objetos 1er. Sem
ELO-329: Diseño y Programación Orientados a Objetos 1 Conceptos ELO329: Diseño y Programación Orientados a Objetos.
Métricas Técnicas para Sistemas Orientados a Objeto
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
1 Diseño Orientado al Objeto Agustín J. González ELO-326: Seminario de Computadores II 2do. Sem
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Facultad de Ingeniería
Programación Orientada a Objeto
Metodología de la programación
Elaboración de algoritmos usando lógica de programación
POO U1: INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS.
Ing. Esp. Ricardo Cujar. Programación Orientada a Objetos  Modelo de desarrollo de software.  Modo de pensar del hombre y no de la máquina.  Abstracción.
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
M.C. Pedro Bello López 1 IMPLEMENTACIÓN. M.C. Pedro Bello López2.
PROGRAMACIÓN IV INTRODUCCIÓN.
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
UNIVERSIDAD TECNOLÓGICA DE IZÚCAR DE MATAMOROS TECNOLOGÍAS DE LA INFORMACION Y COMUNICACIÓN BASE DE DATOS PARA APLICACIONES MTRO. GONZALO ROSAS CABRERA.
ORIENTACIÓN A OBJETOS El paradigma.
La Programación Orientado a Objetos
Marco de Trabajo para Indexación, Clasificación y Recopilación Automática de Documentos Digitales Javier Caicedo Espinoza Gonzalo Parra Chico.
Servicios Web Conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre.
Fundamentos de Programación Unidad I Conceptos Básicos.
Fundamentos de Ingeniería de Software
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Prof. Manuel B. Sánchez. Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno.
Programación Orientada a Objetos Unidad 5. Los objetos son entidades que combinan estado Contiene toda la información denominados atributos REPASO Cada.
1 Introducción a la Programación Orientada a Objetos Programación Orientada a Objetos Departamento de Sistemas Universidad del Cauca 2006.
2015-BM5A. Introducción Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos.
Presentación De UML Lenguaje estándar para escribir planos de software Se usa para visualizar, especificar, construir y documentar los artefactos de un.
PARADIGMA viene del Griego Paradeima = Modelo. Un paradigma es el resultado de los usos, y costumbres, de creencias establecidas de verdades a medias,
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Transcripción de la presentación:

1 Pensando Orientado a Objetos Agustín J. González ELO-329: Diseño y Programación Orientados a Objetos 1er. Sem. 2003

2 Introducción En esta clase exploraremos y explicaremos las bases de la programación orientada al objeto (OOP) y se ilustrarán las siguientes dos ideas: –OOP es una idea revolucionaria, totalmente distinta de otras en programación –OOP es un paso en la evolución de previos abstracciones de programación

3 ¿Por qué es popular OOP? –La esperanza que rápidamente y fácilmente conducirá a aumentar la productividad y mejorar confiabilidad. De la mano viene Diseño Orientado a Objetos. –El deseo de una transición simple de lenguajes existentes. –La similitud con técnicas de pensamiento sobre problemas en otras áreas. La programación de un computador aún es una de las más difíciles tareas enfrentadas por el hombre; llegar a ser hábil en programación requiere talento, creatividad, inteligencia, lógica, la habilidad de construir y usar abstracciones, y experiencia. Programación Orientada al Objeto es una nueva forma de pensar sobre qué significa hacer cómputos, sobre cómo podemos estructurar información al interior de un computador.

4 Lenguaje y Pensamiento En otras palabras la forma como hablamos influye en la manera como vemos el mundo (y viceversa). Esto es válido no solo para los lenguajes naturales (español, inglés, mapuche...) sino también para los lenguajes artificiales como los de programación (C, Pascal, C++, Java...) Ejemplos: –Esquimales y la nieve: en su lengua existen gran número de términos para referirse a la nieve dependiendo de su contextura. No basta con conocer las palabras, sino que hay saber reconocer los tipos de nieve para usar el lenguaje correctamente. Análogamente, no basta conocer un lenguaje OO, sino que hay que saber usarlo Programas FORTRAN pueden ser escritos en cualquier lenguaje –Otro: Estoy acalorado v/s Estoy caliente –Un Ejemplo en Lenguajes de Computación: Si se desea saber si un patrón de largo M (fijo y pequeño ~ 10) se repite en una secuencia, una estrategia es tomar en secuencia grupos de M símbolos y compararlos otros M símbolos de la secuencia para todas las posibilidades. Sería la forma de un programador Pascal o C. Otra forma es hacer una matriz de ancho M y el largo de la secuencia, luego ordenar las filas de la matriz y comparar filas iguales. Sería la forma de un programador APL, donde la operación de ordenar es trivial y los loops son difíciles.

5 Lenguaje y Pensamiento (Cont.) Hipótesis de Whorf: Puede ser posible para un individuo trabajando en un lenguaje imaginar pensamientos o ideas que no pueden ser trasladadas o entendidas por individuos trabajando en otro contexto lengüistico. ¿Entendemos los problemas de origen étnico y religioso en algunos países del planeta? Conjetura de Church: Cualquier computación para la cual existe un procedimiento efectivo puede ser realizada por una máquina de Turing. (ésta dispone de una máquina de estados y una cinta donde se puede escribir y borrar). En los 60s se demostró que esta máquina podía ser emulada por cualquier lenguaje con la sentencia condicional. Entonces en qué quedamos, estas dos ideas parecen contradictorias. Técnicas de orientación al objeto no proveen ninguna capacidad computacional nueva que permita resolver problemas no solubles por otros medios. Pero estas técnicas hacen estas soluciones más fáciles y naturales y favorece la administración de grandes proyectos.

6 Una nueva forma de ver el mundo Supongamos que deseo enviar flores a mi abuelita. Una forma es ir a la florería y pedirselo a la vendedora. Le doy el tipo de flores y la dirección donde enviarlas. Yo busco un agente (la vendedora) y le paso un mensaje con el requerimiento. Es la responsabilidad de la vendedora el enviar las flores. Hay un método, conjunto de operaciones o algoritmo, usado por a vendedora para hacer esto. Yo no necesito conocer este método. Las acciones son iniciadas en OOP por la transmisión de un mensaje a un agente (un objeto) responsable por la acción. Dos ideas: Ocultar información (dejar saber sólo lo indispensable o principio de Information Hiding) y sacarse la idea de tener que escribir todo y no usar servicios de otros (delegar). Dos importantes diferencias entre Procedimientos y Mensajes –En mensajes hay un receptor designado, en procedimientos no. –La interpretación del mensaje (método) depende del receptor. Por ejemplo, mi esposa no actuaría igual si le pido enviar las flores. Usualmente el receptor de un mensaje no se conoce hasta tiempo de ejecución. Decimos que la ligazón entre mensajes (nombre de función o procedimiento) y el fragmento de código (método) usado para responder es determinada en tiempo de ejecución.

7 Responsabilidades Un concepto en OOP es describir comportamientos en términos de responsabilidades. Esto permite aumentar el nivel de abstracción y mejora la independencia entre agentes (importante para resolver problemas complejos). La colección de responsabilidades asociadas con un objeto es descrita por el término protocolo. No pregunte por lo que tu puedes hacer a tu estructura de datos, sino pregunta lo que tu estructura de datos puede hacer por ti. Clases e Instancias Nosotros siempre tenemos una idea de las cosas mas allá de ellas mismas. La vendedora es una instancia de una categoría o clase (por ejemplo Florista). Todos los objetos son instancias de alguna clase. Jerarquía de clases y herencia El hecho que el conocimiento de una categoría más general es también aplicable a una categoría específica se conoce como Herencia. Decimos que la clase Florista hereda los atributos de la clase Vendedor, y ésta hereda de la clase Humano, y ésta hereda de la clase Mamífero.... Se establece así una Jerarquía de clases.

8 Jerarquías de Clases Las clases pueden ser organizadas en estructuras de herencia jerárquicas. Una clase hijo (O subclase) hereda atributos de la clase padre. Una clase abstracta no posee instancias directas y es sólo usada para crear subclases. Por ejemplo Mamífero Objeto Material AnimalPlanta Mamífero Perro Humano VendedorIngeniero Florista Marta (mi florista)Pluto Flor Flores de mi abuelita Clavel Ingeniero Electrónico Agustín Instancias u Objetos Clases

9 Ligazón de métodos, sobremontura (override), y excepciones Hay situaciones en que un método general en una categoría es violado por laguna categoría más específica. Por ejemplo hay un mamífero que pone huevos. En este caso se hace una excepción a la regla general redefiniendo el método en la categoría específica. La búsqueda de un método parte por las definiciones específicas (en las subclases). Sólo si no se le encuentra se busca en las categorías más generales (clases padres o superclases). Cuando una categoría posee un método con el mismo nombre en una categoría superior, se dice que el método sobremonta el comportamiento heredado.

10 Computación como Simulación Ustedes pueden estar acostumbrados al modelo proceso-estado. Al estilo de la máquina de Von Newman. El computador sigue un patrón de instrucciones, dispersas en la memoria, saca valores desde varias localizaciones, los transforma, y pone resultados en otras localizaciones. Este modelo no ayuda mucho para entender como resolver problemas reales. No es la forma de pensar y ver las cosas. La visión de la OOP es crear un universo y es en muchas formas similar al estilo de la simulación llamado simulación conducida por eventos En OOP, tenemos la visión de computación como simulación. Cuando los programadores piensan en los problemas en términos de comportamientos y responsabilidades de objetos, ellos aprovechan su gran intuición, ideas, y entendimiento ganado con la experiencia diaria. No todo puede ser delegar, esto resultaría en una recursión infinita. Los objetos deben hacer algún trabajo antes de pasar los requerimientos a otro agente. En un lenguaje mixto orientado-al-objeto/imperativo, como C++ y Java, esto es hecho por métodos escritos en el lenguaje base (no orientado al objeto).

11 Tratando con la complejidad Los problemas más complejos son comúnmente abordados por un equipo de programadores. La tarea que toma a un programador dos meses, no puede ser realizada por dos programadores trabajando un mes. La razón es la complejidad. La interconexión entre componentes es tradicionalmente complicada y por ello gran cantidad de información debe ser intercambiada entre los integrantes de un equipo. Las comunicaciones entre programadores puede llegar a dominar el tiempo dedicado y la incorporación de más gente alarga el proyecto en lugar de acortarlo. El principal mecanismo para controlar la complejidad es la abstracción. Ésta es la habilidad de encapsular y aislar localmente información de diseño. Los procedimientos son un camino para ocultar información. Pero no resuelven todo, en particular debido a que múltiples programadores pueden coincidir en los mismos nombres.

12 Ejemplo: Un Stack Este ejemplo ilustra las limitaciones de algunos lenguajes para ocultar información y desacoplar tareas. int datastack[100]; int datatop = 0; void init() { datatop=0; } void push (int val) { if (datato 0 ) return (datastack [datatop-1]); } int pop() { if (datatop >0) return (datastack [--datatop]); return 0; } Los datos del stack no pueden ser locales a cada función Sólo hay dos opciones: Locales o Globales -> Globales Globales -> no hay forma de limitar la visibilidad de esos nombres. El nombre datastack debe estar en conocimiento de los otros programadores. Los nombre init, pus, top, pop, ya no pueden ser usados.

13 Ejemplo: Un Stack Definiendo el alcance dentro de un bloque (como en Pascal) begin var datastack: array [1..100] of integer; datatop: integer; procedure init;.... Procedure push(val: integer);.... Procedure pop : integer; end; Al dar acceso a la interfaz (protocolo), también se está dando acceso a sus datos comunes (datatop), al dar acceso los nombres quedan tomados. Para resolver los problemas planteados antes se han propuesto otros lenguajes, como Modula. La idea es está contenida en los dos principios de David Parnas: 1.- Proveer al usuario (otro programador, por ejemplo) toda la información necesaria para usar correctamente un módulo, y NADA MAS. 2.- Se debe proveer al implementador con toda la información que él necesita para completar el módulo, y NADA MAS.

14 Objetos-Mensajes, Herencia, y Polimorfismo Paso de mensajes: En OOP las acciones son iniciadas por un requerimiento a un objeto específico. (analogía: invocación de procedimiento es a procedimiento como mensaje es a método) Lo previo es nada más que un cambio de énfasis. ¿Qué es más natural: llamar a la rutina push con stack y dato como parámetros o pedirle a un stack poner un valor dentro de él? Implícito está la idea que la interpretación del mensaje puede variar con diferentes objetos. Los nombres no necesitan ser únicos. Se pueden usar formas más simples que conducen a programas más leíbles y entendibles. Herencia le permite a diferentes tipos de datos compartir el mismo código (=> menor tamaño de código y mayor funcionalidad). Polimorfismo: Hay varias formas de él. Toda figura (cuadrado, círculo) se puede dibujar, pero cada una de ellas debe definir como hacerlo. En otras palabras, la capacidad de dibujarse es común para todas las figuras, pero cada una de ellas debe definirlo. Si usted desea calcular una raíz cuadrada, ¿por qué debería darle un nombre distinto a la función si la llama sqrt(1.2) con 1.2 como float ó 1.2 como double?

15 Reutilización del software La gente se ha preguntado con frecuencia por qué el software no puede semejarse a la construcción de objetos materiales. Éstos normalmente son construidos a partir de otros elementos ya existentes y depurados. Por ejemplo: El acceso a una tabla indexada para buscar objetos es una operación común en programación; sin embargo, esta operación es reescrita en cada nueva aplicación. Normalmente esto pasa porque los lenguajes tradicionales tienden a relacionar muy fuertemente el tipo del elemento con el código para insertar u buscar los elementos. El uso de técnicas de programación orientada al objeto debería propender a generar gran número de componentes de software reusable.