Tema 1 2_poo

611 views
493 views

Published on

tarea de poo

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
611
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
27
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tema 1 2_poo

  1. 1. Tema 2. El paradigma Orientado a Objetos. Departamento de Lenguajes y Ciencias de la Computación E.T.S. de Ingenieros en Informática Universidad de Málaga http://www.lcc.uma.es/ ~amg/ISE/Tema2.zip
  2. 2. Programa <ul><li>El Paradigma Orientado a Objetos </li></ul><ul><ul><li>Historia e introducción. </li></ul></ul><ul><ul><li>Conceptos básicos. </li></ul></ul><ul><ul><li>Aplicación de los conceptos en lenguajes de programación y métodos de análisis. </li></ul></ul>
  3. 3. Evolución Histórica A B S T R A C C I Ó N O P E R A C I O N A L A B S T R A C C I Ó N D E D A T O S Lenguajes Máquina / Ensamblador Cód.Inst.Simb. Macros Id = Dir Mem. Manip.Total de Datos FORTRAN Subrutinas Funciones Id. Simb. Tipos Oper. restring. PASCAL Anidamiento Subprogramas Registros Tipos definidos Gest. Din. Mem MODULA-2 ADA Encapsulam. Octult. Inform. Espec - Impl Tipo Abstracto de Datos Lenguajes Orientados a Objetos Objetos Métodos Mensajes
  4. 4. Evolución Histórica COMPONENTES A B S T R A C C I Ó N O P E R A C I O N A L A B S T R A C C I Ó N D E D A T O S Lenguajes Máquina / Ensamblador Cód.Inst.Simb. Macros Id = Dir Mem. Manip.Total de Datos FORTRAN Subrutinas Funciones Id. Simb. Tipos Oper. restring . PASCAL Anidamiento Subprogramas Registros Tipos definidos Gest. Din. Mem MODULA-2 ADA Encapsulam. Octult. Inform. Espec - Impl Tipo Abstracto de Datos Lenguajes Orientados a Objetos Métodos Mensajes Objetos Eventos Invocación remota Componentes
  5. 5. Introducción <ul><li>Razones para la crisis del software </li></ul><ul><ul><li>¿Hacer un lápiz es difícil? </li></ul></ul><ul><ul><li>¿La industria del software se parece más a ... </li></ul></ul><ul><ul><ul><li>la fabricación de armas? </li></ul></ul></ul><ul><ul><ul><li>la fontanería? </li></ul></ul></ul><ul><li>Tecnología / objetivo. </li></ul>
  6. 6. Programa <ul><li>El Paradigma Orientado a Objetos </li></ul><ul><ul><li>Historia e introducción. </li></ul></ul><ul><ul><li>Conceptos básicos. </li></ul></ul><ul><ul><li>Aplicación de los conceptos en lenguajes de programación y métodos de análisis. </li></ul></ul>
  7. 7. ¿Qué es la Orientación a Objetos? <ul><li>El concepto surge en los lenguajes de programación </li></ul><ul><ul><li>Se organiza el software como una colección de objetos discretos que encapsulan </li></ul></ul><ul><ul><ul><ul><ul><li>Estructuras de Datos y </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Comportamiento. </li></ul></ul></ul></ul></ul><ul><ul><li>Un sistema OO funciona mediante la colaboración entre los objetos que se comunican entre sí. </li></ul></ul><ul><li>El concepto se extiende a los métodos de análisis y diseño </li></ul><ul><ul><li>Se utilizan los objetos del mundo real como base para construir modelos </li></ul></ul><ul><ul><li>Los elementos que forman los sistemas del mundo real se corresponden con objetos software </li></ul></ul>
  8. 8. Las clases y los objetos están en todas partes Vehículo Punto Figura Animal (1,3) (2,2) (2,1) (5,2.5) Platero:Animal
  9. 9. Conceptos básicos: CLASES y OBJETOS <ul><li>CLASE </li></ul><ul><ul><li>Atributos </li></ul></ul><ul><ul><li>Operaciones </li></ul></ul><ul><ul><li>Comportamiento </li></ul></ul>Lavadora marca modelo capacidad: integer ... Programar PonerRopa CerrarPuerta Lavar <ul><li>OBJETO </li></ul><ul><ul><li>Valores de los atributos </li></ul></ul><ul><ul><li>Estado </li></ul></ul><ul><ul><li>Identidad </li></ul></ul>ID:Lavadora marca=“Lapava” capacidad=5 estado=centrifugando
  10. 10. Conceptos básicos: PASO DE MENSAJES <ul><li>Invocación de métodos </li></ul><ul><li>Medio de colaboración entre objetos </li></ul>:MandoADistancia :Televisor Conectar() Canal(4)
  11. 11. Conceptos básicos: ENCAPSULACIÓN <ul><li>Ocultación de detalles </li></ul><ul><li>Concepto de Interfaz </li></ul><ul><li>Independencia </li></ul>Vol+ Sens3 => Vol++ => DAC31.out=2.1 => Amp27.gain=1.3 => OSD, Pref, ... Sens => VolUp => => Settings.vol++ => DAC23.out=0.7 => Amp02.gain=1.7 => OSD, Pref, ...
  12. 12. Conceptos básicos: HERENCIA <ul><li>Generalización / Especialización </li></ul><ul><li>Los objetos “heredan” las características de la clase. </li></ul><ul><li>Las clases pueden heredar de otras clases. </li></ul><ul><ul><li>Extensión. </li></ul></ul><ul><ul><li>Restricción. </li></ul></ul><ul><ul><li>Modificación. </li></ul></ul><ul><li>Utilidad: </li></ul><ul><ul><li>Abstracción. </li></ul></ul><ul><ul><li>Reutilización. </li></ul></ul>Hormiga Plancha Televisor Electrodoméstico tensión consumo Conectar Desconectar Lavadora capacidad numCanales vapor
  13. 13. Conceptos básicos: POLIMORFISMO <ul><li>Ej: Operación “Abrir” </li></ul><ul><li>Permite al modelador hablar el lenguaje del cliente. </li></ul><ul><li>Evita asignar identificadores artificiosos para distinguir las operaciones. </li></ul><ul><li>Contribuye a la reutilización de código. </li></ul><ul><li>Ej: Operación “Enchufar” </li></ul>Puerta Plazo Puerto Cuenta Abrir() Abrir() Abrir() Abrir() TomaDeCorriente tensión Enchufar(e:Electrodoméstico)
  14. 14. Conceptos básicos: ASOCIACION <ul><li>Modela la relación entre objetos (necesaria para que se comuniquen y colaboren) </li></ul><ul><li>Asociación-Clase / Enlace-Objeto </li></ul><ul><li>Tipos básicos: </li></ul><ul><ul><li>Asociación </li></ul></ul><ul><ul><li>Herencia </li></ul></ul><ul><ul><li>Agregación / Composición (agregación fuerte) </li></ul></ul>Coche Motor Árbol Hoja
  15. 15. Hasta aquí deberíamos tener claro ... <ul><li>Cómo surge el enfoque OO. </li></ul><ul><li>Cómo funciona un sistema OO. </li></ul><ul><li>El concepto y la representación de: </li></ul><ul><li>Asociación </li></ul><ul><ul><li>Agregación </li></ul></ul><ul><ul><li>Herencia </li></ul></ul><ul><li>Polimorfismo </li></ul><ul><li>Paso de mensajes </li></ul><ul><li>Encapsulación </li></ul><ul><li>Clase y Objeto </li></ul><ul><ul><li>Atributos </li></ul></ul><ul><ul><li>Operaciones </li></ul></ul><ul><ul><li>Comportamiento </li></ul></ul><ul><ul><li>Identidad </li></ul></ul><ul><li>Interfaz </li></ul>
  16. 16. Programa <ul><li>El Paradigma Orientado a Objetos </li></ul><ul><ul><li>Historia e introducción. </li></ul></ul><ul><ul><li>Conceptos básicos. </li></ul></ul><ul><ul><li>Aplicación de los conceptos en lenguajes de programación y métodos de análisis. </li></ul></ul>
  17. 17. Clases y Objetos <ul><li>CLASE = MODULO + TIPO </li></ul><ul><ul><ul><li>Criterio de Modularización </li></ul></ul></ul><ul><ul><ul><li>Estado + Comportamiento </li></ul></ul></ul><ul><ul><ul><li>Entidad estática (en general) </li></ul></ul></ul><ul><li>OBJETO = Instancia de una CLASE </li></ul><ul><ul><ul><li>Objeto (Clase)  Valor (Tipo) </li></ul></ul></ul><ul><ul><ul><li>Identidad </li></ul></ul></ul><ul><ul><ul><li>Entidad dinámica </li></ul></ul></ul><ul><ul><ul><li>Cada objeto tiene su propio estado </li></ul></ul></ul><ul><ul><ul><li>Objetos de una clase comparten su comportamiento </li></ul></ul></ul>
  18. 18. <ul><li>Métodos : definen el comportamiento de una clase </li></ul><ul><li>Invocación de métodos: Paso de Mensajes </li></ul><ul><li>obj.mens(args) mens(obj,args) </li></ul>Métodos y Mensajes Punto x,y: float trasladar(a,b) distancia(pto) Estado e identidad Comportamiento trasladar(1,-1) P1:Punto X=2 Y=2
  19. 19. Clases <ul><li>Estructuras que encapsulan datos y funciones </li></ul>class Punto { public : Punto(); float x,y; void trasladar( float , float ); void cambiar_x( float a){x=a;}; void cambiar_y( float b){y=b;}; float distancia(Punto); }; “ Punto.hpp” VARIABLES DE ESTADO (DATOS MIEMBRO) MÉTODOS (FUNCIONES MIEMBRO) CONSTRUCTOR
  20. 20. Colaboración entre objetos <ul><li>Los objetos (clases) colaboran para resolver problemas. </li></ul><ul><li>La forma en que los objetos (clases) colaboran puede ser muy variada: </li></ul><ul><ul><li>Asociación simple </li></ul></ul><ul><ul><li>Herencia </li></ul></ul><ul><ul><li>Agregación </li></ul></ul><ul><ul><li>Composición </li></ul></ul><ul><ul><li>... </li></ul></ul>
  21. 21. Agregación de objetos class Segmento { private Punto inicio,final; public Segmento(Punto p) {inicio = Punto(); final = p;} public float longitud() {return inicio.distancia(final);} public void trasladar( float a, float b) {inicio.trasladar(a,b); final.trasladar(a,b);} }
  22. 22. Composición de objetos public class Habitacion { private int numHabitacion; private int numCamas; // declaración de métodos ... } public class Hotel1 { Habitacion h1; Habitacion h2; // resto declaraciones ... h1 = new Habitacion( 222 ); }
  23. 23. Construcción y Destrucción <ul><li>Diferentes mecanismos para la creación y la eliminación de objetos, dependiendo del lenguaje. </li></ul><ul><li>Construcción de objetos (  reservar memoria ): </li></ul><ul><ul><li>Constructores (C++, Eiffel, Java) </li></ul></ul><ul><ul><li>Métodos de clase (Smalltalk) </li></ul></ul><ul><li>Eliminación de objetos (  liberar memoria ): </li></ul><ul><ul><li>Destructores (C++) </li></ul></ul><ul><ul><li>Recolección automática de memoria – garbage collection - (Smalltalk, Eiffel, Java) </li></ul></ul>Detalles
  24. 24. Construcción y Destrucción <ul><li>//C++ </li></ul><ul><li>class Jugador { </li></ul><ul><li>int salud; </li></ul><ul><li>int fuerza; </li></ul><ul><li>Jugador(); // constructor - no tiene tipo </li></ul><ul><li>Jugador(int s, int f); // constructor alternativo </li></ul><ul><li>void mover(); </li></ul><ul><li>void atacar(); </li></ul><ul><li>}; </li></ul><ul><li>Jugador:: ~ Jugador() { </li></ul><ul><li>salud = 0; </li></ul><ul><li>fuerza = 0; </li></ul><ul><li>} </li></ul>
  25. 25. Construcción y Destrucción <ul><li>JAVA </li></ul><ul><li>class Circulo extends Elipse { </li></ul><ul><li>// extensión, restricción, modificación ; </li></ul><ul><li>public Circulo () { </li></ul><ul><li>... }; </li></ul><ul><li>public Circulo (int radio) { </li></ul><ul><li>... }; </li></ul><ul><li>} </li></ul><ul><li>... </li></ul><ul><li>Circulo c1; </li></ul><ul><li>... </li></ul><ul><li>c1 = new Circulo(4); </li></ul>
  26. 26. Construcción y Destrucción <ul><li>Smalltalk </li></ul><ul><li>Vehiculo subc lass : #Coche </li></ul><ul><li>// extensión, restricción, modificación ; </li></ul><ul><li>... </li></ul><ul><li>MiCoche := C oche new: ’ABC-1234’ </li></ul>
  27. 27. Herencia <ul><li>Posibilidad de reutilizar código </li></ul><ul><li>Algo más que incluir ficheros o importar módulos </li></ul><ul><li>Distintos tipos de herencia: </li></ul><ul><ul><li>simple / múltiple </li></ul></ul><ul><ul><li>de implementación/de interfaz </li></ul></ul><ul><li>Limitaciones </li></ul><ul><li>Problemas </li></ul>Detalles Figura Polígono Elipse Círculo Irregular Regular
  28. 28. Herencia <ul><li>JAVA </li></ul><ul><li>class Elipse extends Figura { </li></ul><ul><li>// extensión, restricción, modificación </li></ul><ul><li>} </li></ul><ul><li>C++ </li></ul><ul><li>class Elipse : public Figura { </li></ul><ul><li>// extensión, restricción, modificación </li></ul><ul><li>} </li></ul><ul><li>Smalltalk </li></ul><ul><li>Figura subc lass : #Elipse </li></ul><ul><li>” extensión, restricción, modificación” </li></ul><ul><li>Python </li></ul><ul><li>c lass Elipse (Figura) </li></ul><ul><li>” extensión, restricción, modificación” </li></ul>
  29. 29. Herencia <ul><li>Extensión y Reutilización de código </li></ul><ul><li>Una clase derivada hereda el comportamiento de su clase padre </li></ul><ul><li>Redefinición de métodos </li></ul><ul><li>Clases abstractas </li></ul><ul><li>Herencia múltiple / Herencia repetida </li></ul>
  30. 30. Polimorfismo <ul><li>Una variable puede referirse a objetos de una clase distinta de la que se ha declarado </li></ul><ul><li>Tipo Dinámico vs. Tipo Estático </li></ul><ul><li>Polimorfismo de objetos / de mensajes </li></ul><ul><li>Restricción en base a la herencia </li></ul>puntero a objeto en C++
  31. 31. Encapsulación <ul><li>Las clases ocultan los detalles de realización de los métodos. </li></ul><ul><li>Los “usuarios” (los objetos que invocan esos métodos) conocen el interfaz y la semántica. No tienen que preocuparse de los detalles. </li></ul><ul><li>El concepto de interfaz puede ampliarse. </li></ul><ul><li>Contribuye a la reusabilidad del código. </li></ul>
  32. 32. Al fin del tema 2 debemos tener claro ... <ul><li>Cómo surge y evoluciona el concepto OO. </li></ul><ul><li>Cuáles son los elementos y características básicas de este enfoque. </li></ul><ul><li>Cómo se plasma el enfoque OO en los lenguajes de programación. </li></ul><ul><li>Las particularidades que se introducen sobre los conceptos básicos al aplicarlos en sistemas reales </li></ul>
  33. 33. A continuación ... <ul><li>El Lenguaje de Modelado Unificado . </li></ul><ul><ul><li>Introduciremos UML, y </li></ul></ul><ul><ul><li>veremos cómo realizar </li></ul></ul><ul><ul><ul><li>Modelado estructural </li></ul></ul></ul><ul><ul><ul><li>Modelado del comportamiento </li></ul></ul></ul><ul><ul><ul><li>Modelado arquitectónico </li></ul></ul></ul><ul><li>Preparación: </li></ul><ul><ul><li>Tema 3. El Lenguaje de Modelado Unificado . </li></ul></ul><ul><ul><li>http://polaris.lcc.uma.es/ ~amg/ISE/Tema3.zip </li></ul></ul><ul><ul><li>Caps. 1,3,4,5. Schmuller. Teach yourself UML in 24 hours. </li></ul></ul><ul><ul><li>Cap, 1. “Los 3 amigos” , The Unified Modeling Language . </li></ul></ul><ul><ul><li>Probar/Jugar con Rational Rose y MagicDraw UML. </li></ul></ul>

×