SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Algoritmos y Programación




                            Clase 5:
   Mecanismos de la
Programación Orientada
      a Objetos

                                       www.unaj.edu.ar
Algoritmos y Programación




                  Temario
                 •   Miembros de clases.
                 •   Composición.
                 •   Herencia y Jerarquia de clases.
                 •   Sobreescritura.
                 •   Polimorfismo.
                 •   Diagrama de clases UML.




                                                       www.unaj.edu.ar
Algoritmos y Programación




                     Variables de clase
                 •    Las variables de clase son elementos que guardan
                      informacion relacionada con la clase y son compartidas
                      por todas las instancias.

                 •    Las formas de acceder a una variable de clase son:
                       – NombreDeClase.nombreVariable
                       – self.nombreVariable
                       – instancia.nombreVariable




                                                                       www.unaj.edu.ar
Algoritmos y Programación




                     Métodos de clase
                 •    Hay situaciones donde es necesario ejecutar un método
                      sin contar con instancias de una clase, para esos casos
                      se utilizan los métodos de clase.

                 •    Un método de clase solo tiene acceso a sus variables
                      locales, parámetros y variables de clase.




                                                                        www.unaj.edu.ar
Algoritmos y Programación



                  Miembros de clase en Python

                                Variables de Clase


                                                     Metodo de Clase




                                                                www.unaj.edu.ar
Algoritmos y Programación




                  Objetos compuestos
        •   La composición es un tipo de relación en la cual se expresa una
            dependencia entre dos objetos, en dónde un objeto más
            complejo es conformado por objetos más pequeños. En esta
            situación, la frase “tiene un”, debe tener sentido:
             – La pc tiene un monitor.
             – El auto tiene ruedas.


        •   La forma usual de componer objetos a partir de otros más
            simples es almacenarlos en atributos.


        •   Componer es una tecnica fundamental de la programación
            orientada a objetos.

        •
                                                                              www.unaj.edu.ar
Algoritmos y Programación


                  Composición de objetos en Python
 En el problema de dibujar figuras, la siguiente frase tiene sentido:
 “Las figuras geometricas tienen un punto que guarda el centro de coordanadas. ”




                        Las instancias de FiguraGeometrica estan compuesta por una
                        instancia de la clase Punto que guarda el centro de la misma.




                                                                            www.unaj.edu.ar
Algoritmos y Programación




                  Herencia
        •   En POO, al principio que permite aplicar el conocimiento de una categoría más
            general a una más específica se denomina herencia.El término herencia se refiere
            al hecho de que una clase hereda los atributos (variables) y el comportamiento
            (métodos) de otra clase.
        •   La herencia es el mecanismo por el cual se implementa la relación “es un” entre
            clases.
        •   La herencia nos permite concebir una nueva clase de objetos como un refinamiento
            de otra clase de objetos ya existente, conservando las similitudes entre las clases
            de objetos y especificando solamente las diferencias de la nueva clase de objetos.

                 Animal                 La herencia es el mecanismo de los lenguajes
                                        orientados a objetos que implementa la relación “es
                                        un” entre clases. La relación “es un” entre clases,
                Mamífero                nos permite establecer que una clase es como otra,
                                        con la excepción de que la nueva clase incluye
                                        “cosas” extras.
                 Gato

                                                                                         www.unaj.edu.ar
Algoritmos y Programación

                  Herencia en Python
  En Python cuando una clase A especifica luego de su nombre otro nombre
  de clase, llamémosla B, entre paréntesis, se está indicando que A hereda de B.




                                 UNA
                            ES                   Heredan de FiguraGeometrica


                                       ES UNA




        La clases Linea, Circulo y Rectangulo son subclases de FiguraGeometrica.
                                                                          www.unaj.edu.ar
Algoritmos y Programación



                  Herencia Multiple
          • Python provee la posibilidad de definir relaciones de
            herencia múltiple o sea heredar de mas de una clase.
      class Terrestre:
         def desplazar(self):
            print "El animal anda“

      class Acuatico:
         def desplazar(self):
            print "El animal nada"

      class Cocodrilo(Terrestre,
      Acuatico):
         pass           ¿Qué método se ejecuta?

      c = Cocodrilo() Acción: Toma el método de la clase más a la izquierda
      c.desplazar()   de la lista, por lo que mostraría: “El animal anda”
                                                                   www.unaj.edu.ar
Algoritmos y Programación




                  Jerarquía de clases
        • Las clases pueden ser organizadas en jerarquías de
          herencia donde, las clases hijas o subclases, heredarán
          estado y comportamiento de las clases que se encuentran
          más arriba en la jerarquía, llamadas superclases.

        • La clase Object es la raíz de la jerarquía de clases en
          Python. Cualquier clase que no especifique un padre directo,
          será subclase directa de Object.

        • Las subclases pueden agregar nuevas variables y métodos,
          cambiando en algunos casos el comportamiento de los
          métodos heredados.
                                                              www.unaj.edu.ar
Algoritmos y Programación




                  Sobreescritura
        • ¿Qué pasa si en una subclase se define un método que
          tenga exactamente la misma firma (nombre, tipo de retorno,
          y lista de argumentos (orden, cantidad y tipo) ) que un
          método de la superclase?
           – La subclase esta sobre-escribiendo el metodo de la
              superclase.

        • La sobreescritura permite definir un método en una
          subclase, que tenga exactamente la misma firma que un
          método de la superclase.



                                                             www.unaj.edu.ar
Algoritmos y Programación

                  Ejemplo de Sobreescritura
        Las tres superclases de FiguraGeometrica: Linea, Circulo y Rectangulo
        sobreescriben el método dibujar() definido en la superclase.




                                                       Sobreescriben




                                                                           www.unaj.edu.ar
Algoritmos y Programación



                  Reutilizando código
          •   Un forma usual de reutilizar codigo, es invocar metodos con
              funcionalidad comun codificados en las superclases.
      class Terrestre:
         def desplazar(self):
            print "camina“                                 Invocación

      class Mamifero(Terrestre):
         def desplazar(self):
            Terrestre.desplazar(self)
            print "el mamifero"

      m = Mamifero()              ¿Cuál es el resultado?
      m.desplazar()

     Acción: Primero invoca el método de la superclase y luego pasa el control a la
     funcionalidad propia de la subclase, por lo que mostraría:“camina” ”el mamifero”
                                                                            www.unaj.edu.ar
Algoritmos y Programación


                  ¿Quien recibe el mensaje dibujar()?
       • ¿Cual es la clase del objeto que recibe el mensaje dibujar()?




                                          ?


                            No hay manera de saber, mirando el código, que clase
                            de figura geometrica ejecutará el dibujar(), eso depende
                            del valor que tome la variable figura en ejecución.
                                                                           www.unaj.edu.ar
Algoritmos y Programación




                  Binding en Python
        • Conectar la invocación de un método con el cuerpo del
          mismo, se llama binding.

        • Si el binding, se hace en compilación, se llama binding
          temprano o estático.

        • Si se hace en ejecución binding tardío o dinámico.

        • Python usa binding dinámico, la resolución de las
          invocaciones a métodos, se hace en ejecución (run-time),
          basándose en el tipo del objeto receptor.
                                                               www.unaj.edu.ar
Algoritmos y Programación




                  Polimorfismo
        • Polimorfismo es la capacidad de que varias subclases
          utilicen un mismo método de forma diferente.

        • Para utilizar la tecnica del polimorfismo generalmente se
          realiza lo siguiente:
           – Se define una jerarquia de herencia.
           – Se implementa una interface común en la clase que se
             encuentra en el tope de la jerarquia.
           – Se codifica diferentes versiones de los métodos
             especificados en la interface común.
             .
                                                              www.unaj.edu.ar
Algoritmos y Programación


                  Polimorfismo                        El polimorfismo se vale de la
                                                      sobreescritura de metodos y
                                                      binding dinámico para poder
                                                      funcionar.
                              ?
             ≠
                              ?
             ≠                ?
             ≠                ?


    En el ejemplo, tenemos tres subclases distintas: Linea, Circulo y Rectangulo que
    heredan de una superclase llamada FiguraGeometrica. Esta ultima clase define
    el método dibujar() sin implementacion, el cual es sobreescrito en cada una de
    las subclases de FiguraGeometrica. Con lo cual el envio del mensaje dibujar()
    se traducira en distintos comportamientos según la instancia que lo reciba.
                                                                            www.unaj.edu.ar
Algoritmos y Programación


                  ¿Qué es el diseño orientado a objetos?
         •   Un diseño Orientado a Objetos expresa, sin necesidad de
             escribir código, como colaboran los objetos para realizar sus
             actividades.
         •   Han existido diversos métodos y técnicas orientadas a objetos,
             con muchos aspectos en común pero utilizando distintas
             notaciones.
         •   Como resultado de varias de ellas, surgió el Lenguaje Unificado
             de Modelado (del Unified Modeling Language – UML) como
             estándar para el modelado de sistemas de software. En 1994,
             Booch, Rumbaugh (OMT) y Jacobson (Objectory) deciden
             unificar sus métodos y nace el UML.
                     “Es un lenguaje de propósito general
                          para el modelado orientado a
                                       objetos”



                                                                      www.unaj.edu.ar
Algoritmos y Programación


                  Lenguaje Unificado de Modelado (UML)
             •   Posee distintos tipos de diagramas, pero en este curso
                 veremos sólo el Diagrama de Clases.
             •   En el diagrama de clases, un clase se describe en función de
                 sus atributos y mensajes.




              La notación para una clase es la siguiente:

                            NombreDeLaClase
                            atributos           Estado
                            mensajes()          Comportamiento



                                                                      www.unaj.edu.ar
Algoritmos y Programación


                       UML – Diagrama de Clases - Atributos
               Determinan la estructura que permite al objeto conservar un
               estado.

                           La notación para los atributos es la siguiente:
                                        UML define prefijos para definir niveles de visibilidad:
                                            + para atributos públicos
                                            # para atributos protegidos
                                            - para atributos privados


                                                 Se recomienda no usar atributos públicos,
     nombre del atributo                             porque violan el encapsulamiento




                                                                                      www.unaj.edu.ar
Algoritmos y Programación


                   UML – Diagrama de Clases - Mensajes

             Es el comportamiento que le permite a un objeto de esta clase
             comunicarse con otros objetos.



                       La notación para los mensajes es la siguiente:


                            Clase                       Los niveles de visibilidad
       atributos                                       son los mismos que para los
                                                       atributos.
       visiblidad operación()
       visiblidad operación (argumentos):resultado()




                                                                            www.unaj.edu.ar
Algoritmos y Programación


                     UML – Diagrama de Clases - Relaciones

              Veremos en este curso las técnicas más comúnmente usadas
              que son composición y herencia.


                                                                                Vehiculo
                         crear objetos de                      crear una
                                                                                atributos
     una clase existente dentro de una      clase nueva como de un
     nueva clase.                           tipo de una clase existente.        mensajes()


        Vehiculo                Motor
                                                                   Automóvil                     Moto
        atributos              atributos
                                                                   atributos                   atributos
        mensajes()             mensajes()
                                                                   mensajes()                  mensajes()




                                                                                             www.unaj.edu.ar

Más contenido relacionado

La actualidad más candente

Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenKarlytoz_36
 
Programación orientada al objeto
Programación orientada al objetoProgramación orientada al objeto
Programación orientada al objetoboncastell
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Renny Batista
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetosdesimartinez
 
Poo Java
Poo JavaPoo Java
Poo Javaeccutpl
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Josue Lara Reyes
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clasesstill01
 
Orientacion A Objetos Para Dummies
Orientacion A Objetos Para DummiesOrientacion A Objetos Para Dummies
Orientacion A Objetos Para DummiesSorey García
 
Herencia en C++
Herencia en C++Herencia en C++
Herencia en C++joel1386
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetospontifica
 
9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetosClara Patricia Avella Ibañez
 

La actualidad más candente (20)

Conceptos basicos POO
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POO
 
Unidad1 y 2
Unidad1 y 2Unidad1 y 2
Unidad1 y 2
 
03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
Clases y Objetos
Clases y ObjetosClases y Objetos
Clases y Objetos
 
Programación Orientada a Objetos - Resumen
Programación Orientada a Objetos - ResumenProgramación Orientada a Objetos - Resumen
Programación Orientada a Objetos - Resumen
 
Programación orientada al objeto
Programación orientada al objetoProgramación orientada al objeto
Programación orientada al objeto
 
Poo
PooPoo
Poo
 
POO
POOPOO
POO
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetos
 
Poo Java
Poo JavaPoo Java
Poo Java
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)
 
Java basico
Java basicoJava basico
Java basico
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Orientacion A Objetos Para Dummies
Orientacion A Objetos Para DummiesOrientacion A Objetos Para Dummies
Orientacion A Objetos Para Dummies
 
Herencia en C++
Herencia en C++Herencia en C++
Herencia en C++
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos
 

Similar a Clase5

Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herenciajlmanmons
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosMario Villaseñor
 
Análisis y diseño de sistemas de información
Análisis y diseño de sistemas de informaciónAnálisis y diseño de sistemas de información
Análisis y diseño de sistemas de informaciónjovy2905
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc X
 
U8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfU8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfJCarlosCrespo
 
Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguezcoruniversitec
 
PROGRAMACION_ORIENTADA_A_OBJETOS.pdf
PROGRAMACION_ORIENTADA_A_OBJETOS.pdfPROGRAMACION_ORIENTADA_A_OBJETOS.pdf
PROGRAMACION_ORIENTADA_A_OBJETOS.pdfMariaTeresaGarznPrez
 
Introduccion Programación Orientada a Objetos.ppt
Introduccion Programación Orientada a Objetos.pptIntroduccion Programación Orientada a Objetos.ppt
Introduccion Programación Orientada a Objetos.pptdocmarcoantoniosotov
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptNachoTValverde
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptjhonJD1
 
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Didier Granados
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoAlvaro Enrique Ruano
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptssuser0b0b0e1
 
Análisis y diseño de sistemas de información
Análisis y diseño de sistemas de informaciónAnálisis y diseño de sistemas de información
Análisis y diseño de sistemas de informaciónjovy2905
 
Definiciones taller 8 agost
Definiciones taller 8 agostDefiniciones taller 8 agost
Definiciones taller 8 agostoosorioj
 

Similar a Clase5 (20)

Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herencia
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a Objetos
 
Conceptos basicos
Conceptos basicosConceptos basicos
Conceptos basicos
 
Análisis y diseño de sistemas de información
Análisis y diseño de sistemas de informaciónAnálisis y diseño de sistemas de información
Análisis y diseño de sistemas de información
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios poo
 
U8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdfU8.- Programacion Orientada a objetos II (2).pdf
U8.- Programacion Orientada a objetos II (2).pdf
 
Historia java ruben
Historia java rubenHistoria java ruben
Historia java ruben
 
Historia java ruben rodriguez
Historia java ruben rodriguezHistoria java ruben rodriguez
Historia java ruben rodriguez
 
PROGRAMACION_ORIENTADA_A_OBJETOS.pdf
PROGRAMACION_ORIENTADA_A_OBJETOS.pdfPROGRAMACION_ORIENTADA_A_OBJETOS.pdf
PROGRAMACION_ORIENTADA_A_OBJETOS.pdf
 
Introduccion Programación Orientada a Objetos.ppt
Introduccion Programación Orientada a Objetos.pptIntroduccion Programación Orientada a Objetos.ppt
Introduccion Programación Orientada a Objetos.ppt
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes PO...
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
Conceptos poo
Conceptos pooConceptos poo
Conceptos poo
 
Lp13
Lp13Lp13
Lp13
 
Programación Orientada a Objetos.ppt
Programación Orientada a Objetos.pptProgramación Orientada a Objetos.ppt
Programación Orientada a Objetos.ppt
 
Análisis y diseño de sistemas de información
Análisis y diseño de sistemas de informaciónAnálisis y diseño de sistemas de información
Análisis y diseño de sistemas de información
 
Definiciones taller 8 agost
Definiciones taller 8 agostDefiniciones taller 8 agost
Definiciones taller 8 agost
 

Más de Jorge Gamez

Más de Jorge Gamez (19)

Python i
Python iPython i
Python i
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepciones
 
Practica repaso 4 5 2da
Practica repaso 4 5 2daPractica repaso 4 5 2da
Practica repaso 4 5 2da
 
Practica repaso 1 3-2
Practica repaso 1 3-2Practica repaso 1 3-2
Practica repaso 1 3-2
 
Practica repaso pilas y colas con archivos
Practica repaso pilas y colas   con archivosPractica repaso pilas y colas   con archivos
Practica repaso pilas y colas con archivos
 
Practica repaso pilas y colas
Practica repaso pilas y colasPractica repaso pilas y colas
Practica repaso pilas y colas
 
Practica 5
Practica  5Practica  5
Practica 5
 
Practica 4
Practica  4Practica  4
Practica 4
 
Practica 3
Practica  3Practica  3
Practica 3
 
Practica 2
Practica  2Practica  2
Practica 2
 
Practica 1
Practica  1Practica  1
Practica 1
 
Practica repaso 1 3-2
Practica repaso 1 3-2Practica repaso 1 3-2
Practica repaso 1 3-2
 
Clase4
Clase4Clase4
Clase4
 
Clase3
Clase3Clase3
Clase3
 
Clase2
Clase2Clase2
Clase2
 
Clase1
Clase1Clase1
Clase1
 
Clase archivos
Clase   archivosClase   archivos
Clase archivos
 
2 da clase la ingeniería
2 da clase  la ingeniería2 da clase  la ingeniería
2 da clase la ingeniería
 
Presentación clase 3
Presentación clase 3Presentación clase 3
Presentación clase 3
 

Clase5

  • 1. Algoritmos y Programación Clase 5: Mecanismos de la Programación Orientada a Objetos www.unaj.edu.ar
  • 2. Algoritmos y Programación Temario • Miembros de clases. • Composición. • Herencia y Jerarquia de clases. • Sobreescritura. • Polimorfismo. • Diagrama de clases UML. www.unaj.edu.ar
  • 3. Algoritmos y Programación Variables de clase • Las variables de clase son elementos que guardan informacion relacionada con la clase y son compartidas por todas las instancias. • Las formas de acceder a una variable de clase son: – NombreDeClase.nombreVariable – self.nombreVariable – instancia.nombreVariable www.unaj.edu.ar
  • 4. Algoritmos y Programación Métodos de clase • Hay situaciones donde es necesario ejecutar un método sin contar con instancias de una clase, para esos casos se utilizan los métodos de clase. • Un método de clase solo tiene acceso a sus variables locales, parámetros y variables de clase. www.unaj.edu.ar
  • 5. Algoritmos y Programación Miembros de clase en Python Variables de Clase Metodo de Clase www.unaj.edu.ar
  • 6. Algoritmos y Programación Objetos compuestos • La composición es un tipo de relación en la cual se expresa una dependencia entre dos objetos, en dónde un objeto más complejo es conformado por objetos más pequeños. En esta situación, la frase “tiene un”, debe tener sentido: – La pc tiene un monitor. – El auto tiene ruedas. • La forma usual de componer objetos a partir de otros más simples es almacenarlos en atributos. • Componer es una tecnica fundamental de la programación orientada a objetos. • www.unaj.edu.ar
  • 7. Algoritmos y Programación Composición de objetos en Python En el problema de dibujar figuras, la siguiente frase tiene sentido: “Las figuras geometricas tienen un punto que guarda el centro de coordanadas. ” Las instancias de FiguraGeometrica estan compuesta por una instancia de la clase Punto que guarda el centro de la misma. www.unaj.edu.ar
  • 8. Algoritmos y Programación Herencia • En POO, al principio que permite aplicar el conocimiento de una categoría más general a una más específica se denomina herencia.El término herencia se refiere al hecho de que una clase hereda los atributos (variables) y el comportamiento (métodos) de otra clase. • La herencia es el mecanismo por el cual se implementa la relación “es un” entre clases. • La herencia nos permite concebir una nueva clase de objetos como un refinamiento de otra clase de objetos ya existente, conservando las similitudes entre las clases de objetos y especificando solamente las diferencias de la nueva clase de objetos. Animal La herencia es el mecanismo de los lenguajes orientados a objetos que implementa la relación “es un” entre clases. La relación “es un” entre clases, Mamífero nos permite establecer que una clase es como otra, con la excepción de que la nueva clase incluye “cosas” extras. Gato www.unaj.edu.ar
  • 9. Algoritmos y Programación Herencia en Python En Python cuando una clase A especifica luego de su nombre otro nombre de clase, llamémosla B, entre paréntesis, se está indicando que A hereda de B. UNA ES Heredan de FiguraGeometrica ES UNA La clases Linea, Circulo y Rectangulo son subclases de FiguraGeometrica. www.unaj.edu.ar
  • 10. Algoritmos y Programación Herencia Multiple • Python provee la posibilidad de definir relaciones de herencia múltiple o sea heredar de mas de una clase. class Terrestre: def desplazar(self): print "El animal anda“ class Acuatico: def desplazar(self): print "El animal nada" class Cocodrilo(Terrestre, Acuatico): pass ¿Qué método se ejecuta? c = Cocodrilo() Acción: Toma el método de la clase más a la izquierda c.desplazar() de la lista, por lo que mostraría: “El animal anda” www.unaj.edu.ar
  • 11. Algoritmos y Programación Jerarquía de clases • Las clases pueden ser organizadas en jerarquías de herencia donde, las clases hijas o subclases, heredarán estado y comportamiento de las clases que se encuentran más arriba en la jerarquía, llamadas superclases. • La clase Object es la raíz de la jerarquía de clases en Python. Cualquier clase que no especifique un padre directo, será subclase directa de Object. • Las subclases pueden agregar nuevas variables y métodos, cambiando en algunos casos el comportamiento de los métodos heredados. www.unaj.edu.ar
  • 12. Algoritmos y Programación Sobreescritura • ¿Qué pasa si en una subclase se define un método que tenga exactamente la misma firma (nombre, tipo de retorno, y lista de argumentos (orden, cantidad y tipo) ) que un método de la superclase? – La subclase esta sobre-escribiendo el metodo de la superclase. • La sobreescritura permite definir un método en una subclase, que tenga exactamente la misma firma que un método de la superclase. www.unaj.edu.ar
  • 13. Algoritmos y Programación Ejemplo de Sobreescritura Las tres superclases de FiguraGeometrica: Linea, Circulo y Rectangulo sobreescriben el método dibujar() definido en la superclase. Sobreescriben www.unaj.edu.ar
  • 14. Algoritmos y Programación Reutilizando código • Un forma usual de reutilizar codigo, es invocar metodos con funcionalidad comun codificados en las superclases. class Terrestre: def desplazar(self): print "camina“ Invocación class Mamifero(Terrestre): def desplazar(self): Terrestre.desplazar(self) print "el mamifero" m = Mamifero() ¿Cuál es el resultado? m.desplazar() Acción: Primero invoca el método de la superclase y luego pasa el control a la funcionalidad propia de la subclase, por lo que mostraría:“camina” ”el mamifero” www.unaj.edu.ar
  • 15. Algoritmos y Programación ¿Quien recibe el mensaje dibujar()? • ¿Cual es la clase del objeto que recibe el mensaje dibujar()? ? No hay manera de saber, mirando el código, que clase de figura geometrica ejecutará el dibujar(), eso depende del valor que tome la variable figura en ejecución. www.unaj.edu.ar
  • 16. Algoritmos y Programación Binding en Python • Conectar la invocación de un método con el cuerpo del mismo, se llama binding. • Si el binding, se hace en compilación, se llama binding temprano o estático. • Si se hace en ejecución binding tardío o dinámico. • Python usa binding dinámico, la resolución de las invocaciones a métodos, se hace en ejecución (run-time), basándose en el tipo del objeto receptor. www.unaj.edu.ar
  • 17. Algoritmos y Programación Polimorfismo • Polimorfismo es la capacidad de que varias subclases utilicen un mismo método de forma diferente. • Para utilizar la tecnica del polimorfismo generalmente se realiza lo siguiente: – Se define una jerarquia de herencia. – Se implementa una interface común en la clase que se encuentra en el tope de la jerarquia. – Se codifica diferentes versiones de los métodos especificados en la interface común. . www.unaj.edu.ar
  • 18. Algoritmos y Programación Polimorfismo El polimorfismo se vale de la sobreescritura de metodos y binding dinámico para poder funcionar. ? ≠ ? ≠ ? ≠ ? En el ejemplo, tenemos tres subclases distintas: Linea, Circulo y Rectangulo que heredan de una superclase llamada FiguraGeometrica. Esta ultima clase define el método dibujar() sin implementacion, el cual es sobreescrito en cada una de las subclases de FiguraGeometrica. Con lo cual el envio del mensaje dibujar() se traducira en distintos comportamientos según la instancia que lo reciba. www.unaj.edu.ar
  • 19. Algoritmos y Programación ¿Qué es el diseño orientado a objetos? • Un diseño Orientado a Objetos expresa, sin necesidad de escribir código, como colaboran los objetos para realizar sus actividades. • Han existido diversos métodos y técnicas orientadas a objetos, con muchos aspectos en común pero utilizando distintas notaciones. • Como resultado de varias de ellas, surgió el Lenguaje Unificado de Modelado (del Unified Modeling Language – UML) como estándar para el modelado de sistemas de software. En 1994, Booch, Rumbaugh (OMT) y Jacobson (Objectory) deciden unificar sus métodos y nace el UML. “Es un lenguaje de propósito general para el modelado orientado a objetos” www.unaj.edu.ar
  • 20. Algoritmos y Programación Lenguaje Unificado de Modelado (UML) • Posee distintos tipos de diagramas, pero en este curso veremos sólo el Diagrama de Clases. • En el diagrama de clases, un clase se describe en función de sus atributos y mensajes. La notación para una clase es la siguiente: NombreDeLaClase atributos Estado mensajes() Comportamiento www.unaj.edu.ar
  • 21. Algoritmos y Programación UML – Diagrama de Clases - Atributos Determinan la estructura que permite al objeto conservar un estado. La notación para los atributos es la siguiente: UML define prefijos para definir niveles de visibilidad: + para atributos públicos # para atributos protegidos - para atributos privados Se recomienda no usar atributos públicos, nombre del atributo porque violan el encapsulamiento www.unaj.edu.ar
  • 22. Algoritmos y Programación UML – Diagrama de Clases - Mensajes Es el comportamiento que le permite a un objeto de esta clase comunicarse con otros objetos. La notación para los mensajes es la siguiente: Clase Los niveles de visibilidad atributos son los mismos que para los atributos. visiblidad operación() visiblidad operación (argumentos):resultado() www.unaj.edu.ar
  • 23. Algoritmos y Programación UML – Diagrama de Clases - Relaciones Veremos en este curso las técnicas más comúnmente usadas que son composición y herencia. Vehiculo crear objetos de crear una atributos una clase existente dentro de una clase nueva como de un nueva clase. tipo de una clase existente. mensajes() Vehiculo Motor Automóvil Moto atributos atributos atributos atributos mensajes() mensajes() mensajes() mensajes() www.unaj.edu.ar