Conceptos Fundamentales de POO

28
ultad de Informática artamento de Lenguajes y Sistemas Informáticos e Ingeniería de Software versidad Pontificia de Salamanca en Madrid Diseño y Diseño y Programación Programación Orientada a Orientada a Objetos Objetos Un Un enfoque enfoque científico científico Conceptos fundamentales de POO

Transcript of Conceptos Fundamentales de POO

Page 1: Conceptos Fundamentales de POO

Facultad de InformáticaDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería de SoftwareUniversidad Pontificia de Salamanca en Madrid

Diseño y Programación Diseño y Programación Orientada a Objetos Orientada a Objetos UnUn enfoqueenfoque científicocientífico

Conceptos fundamentales de POO

Page 2: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

2

Conceptos fundamentales de POO

Programación estructurada vs. POO Definiciones de términos Objetos Clases Ocultación de Información y visibilidad Instanciación Notación de objetos Mensajes Herencia

Page 3: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

3

La Programación Estructurada (I)

Se emplea desde principios de la década de los 70.

Es uno de los métodos más utilizados en el campo de la programación.

Los programas se construyen descomponiendo el programa en funciones.

En un programa estructurado, lo importante es qué se hace y en segundo plano se piensa en sobre qué estructuras se hace.

Page 4: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

4

La Programación Estructurada (II)

En un programa estructurado los datos locales se ocultan dentro de funciones y los datos compartidos se pasan como argumentos.

La disposición de los datos no se puede cambiar sin modificar todas las funciones que acceden a ellos.

Problemas en desarrollos realizados por muchas personas.

Reutilización mediante bibliotecas de funciones.

Page 5: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

5

La Programación Orientada a Objetos

Booch: Método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son miembros de una jerarquía de clases unidas mediante relaciones de herencia.

Los conceptos fundamentales de la programación orientada a objetos son: objetos, clases ,mensajes, herencia y polimorfismo.

Importa sobre qué se hace y no qué se hace.

Reutilización a través de la derivación de nuevas clases a partir de clases ya existentes: biblioteca de clases predefinidas.

Page 6: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

6

Definiciones de Términos

Abstracción: capacidad para encapsular y aislar la información del diseño y la ejecución.

TAD: Tipo de dato definido por las operaciones que se pueden llevar a cabo sobre los elementos del mismo. TAD= datos + operaciones

Encapsulamiento: propiedad que permite asegurar que el contenido de la información y los detalles de implementación de un TAD están ocultos al exterior.

Objeto: TAD al que se añaden características propias de la POO como la herencia, el paso de mensajes, el polimorfismo y la ligadura dinámica.

Clase: Descripción de un tipo de objetos que resume características comunes de los mismos.

Page 7: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

7

Objetos

Unidad que combina datos (atributos) y las operaciones (métodos) que operan sobre esos datos (encapsulamiento).

Si se desea modificar los datos de un objeto, sólo pueden utilizarse las funciones definidas que interactúan con el mismo. Ninguna otra función puede acceder a los datos.

Los objetos tienen una interfaz pública (qué están dispuestos a hacer) y una representación privada (cómo lo hacen realmente), que permiten ocultar la información que se desee al exterior.

Equivalentes a las variables de la programación estructurada.

Page 8: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

8

Clases

Descripción de un conjunto de objetos que consta de métodos y datos que resumen características comunes de un conjunto de objetos.

Características de una clase: sus atributos y sus operaciones.

Se pueden definir muchos objetos de la misma clase.

Similar a los tipos de datos de la programación estructurada.

Page 9: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

9

Clases (II)

La definición de una clase no crea ningún objeto, de igual modo que una declaración de variables, tampoco crea variables.

Son modelos o plantillas que describen cómo se construyen ciertos tipos de objetos.

Cada vez que se construye un objeto a partir de una clase, se crea lo que se llama una instancia de esa clase: Objeto =instancia de una clase.

Clase = Atributos + Funciones miembro.

Page 10: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

10

Clases (III)

Ejemplo:clase Punto

Coordenadasx, y

MétodosTrasladarLeer xLeer y

Objetos de la clase Punto

5, 9

Métodos 1

3, -2

Métodos 2

-3, 0

Métodos 3

objeto 1 objeto 2 objeto 3

Page 11: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

11

Clases (IV)

Atributos: datos internos de los objetos, sobre los cuales se realizan las operaciones. Generalmente se ocultan al exterior.

Método, operación o función miembro: procedimientos y funciones que residen en el objeto y que determinan su comportamiento.

Notación (UML):

Nombre-clase

Nombre-atributo-1: tipo-dato-1

Nombre-atributo-2: tipo-dato-2

Nombre-operación1 (atributos): tipo1

...

...Nombre-operación2 (atributos): tipo2

Page 12: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

12

Clases en C++ (I)

Declaración básica de una clase en C++

class nombre_clase {//atributostipo1 lista-atributos;tipo2 lista-atributos; …………//operacionestipo-devuelto nombre-operación1 (argumentos);tipo-devuelto nombre-operación2 (argumentos); ……………};

Page 13: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

13

Clases en C++ (II)

Ejemplo:

class Punto {//atributosint x;int y;//operacionesvoid Trasladar(int a, int b);void leerX ();void leerY ();};

Page 14: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

14

Ocultación de información (I)

Visibilidad: propiedad que define si un atributo u operación de un objeto es visible desde fuera del propio objeto.

C++ proporciona 3 valores de visibilidad: public, protected y private.

Las características públicas (public) son accesibles a cualquier usuario de la clase. Los miembros dato (atributos) nunca deben serlo.

Interfaz de la clase: todas las características que se listan después de la palabra reservada public; pueden ser funciones y atributos.

Page 15: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

15

Ocultación de información (II)

Las características protegidas (protected) están ocultas al mundo exterior pero son accesibles a la clase que los contiene y a cualquier clase derivada de la misma. Es un status mixto entre public y private.

Las características privadas (private) sólo son accesibles desde las funciones miembro de la clase que las contiene.

Page 16: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

16

Visibilidad

Clase

atributos

atributosprivados

atributos públicos(no recomendado)

funciones miembro

operacionesprivadas

operacionespúblicas

Interfaz de laclase

class nombre_clase {private://miembros privadosprotected://miembros protegidospublic://miembros públicos};

Page 17: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

17

Instanciación (I)

Los objetos son entidades que existen en el tiempo; por ello, deben ser creados o instanciados.

Un objeto (entidad real) se crea a partir de la definición de la clase (molde) a la que pertenece.

Esta operación se hace a través de operaciones especiales llamadas constructores en C++ o inicializadores.

Pueden existir varios constructores (varias formas diferentes de crear objetos a partir de una clase).

Page 18: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

18

Instanciación (II)

La instanciación la ejecutará implícitamente el compilador o explícitamente el programador, mediante invocación a los constructores.

Programación estructurada: tipo de dato variable

Programación OO: clase objeto

Page 19: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

19

Instanciación (III)

Cuando se crea una instancia de una clase, se llama automáticamente al constructor de la misma.

El propósito de un constructor es inicializar los miembros dato del objeto de la clase cuando se crea el objeto.

Un destructor se llama automáticamente cuando se destruye una instancia de una clase.

El propósito del destructor es liberar la memoria asignada al objeto.

Page 20: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

20

Notación de objetos

Representación gráfica de los objetos en UML (Unified Modeling Language):

Se puede indicar la visibilidad utilizando los símbolos +(público), #(protegido) y – (privado). Ejemplo:

nombre-objeto: Clase

atributo1 = valor

atributo2 = valor

punto1: Punto

x = 3.0

y= - 4.5

Punto

- x: int

+ Leer_X()

Page 21: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

21

Mensajes (l)

Un programa orientado a objetos consiste en un número de objetos, que se comunican unos con otros llamando a funciones miembros.

Un sistema software OO se puede ver como una colección cooperativa de objetos (Meyer).

Los métodos o funciones miembro residen en el objeto y determinan cómo actúan los objetos cuando reciben un mensaje.

Un mensaje es una petición de un objeto a otro objeto (o a sí mismo) al que le solicita ejecutar uno de sus métodos.

Page 22: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

22

Mensajes (ll)

objeto

datos

métodos

llegada demensajes

Los mensajes que recibe el objeto son los únicos conductos que conectan el objeto con el mundo externo. (Objeto =caja negra)

Page 23: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

23

Mensajes (lll)

Un método es el procedimiento o función que se invoca para actuar sobre un objeto. Especifica cómo se ejecuta un mensaje.

C++ utiliza la notación ‘punto’ para el envío de mensajes entre objetos.

Ejemplos: p1.Leer_X(); alarma1.activar(); e1.calcular_sueldo();

Un método puede invocar métodos de otros objetos o del propio objeto al que pertenece.

Page 24: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

24

Mensajes (lV)

Partes de un mensaje:

Identidad del receptor Método invocado Información necesaria para ejecutar el método (argumentos)

pila . introducir (34)

objeto receptor método invocado argumentos

Page 25: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

25

Herencia (I)

Relación entre una clase más general (clase ascendiente o clase padre) y otra más específica (clase hija o descendiente).

La clase hija (subclase) hereda las características (atributos y operaciones) de su clase padre (superclase).

La herencia permite a los objetos ser construidos a partir de otros objetos.

La herencia supone una clase base y una jerarquía de clases que contiene las clases derivadas de la clase base.

Page 26: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

26

Herencia (II)

No confundir herencia con instanciación: Los objetos existentes en la memoria de la computadora, expresan las

características exactas de su clase, la cual sirve como modelo o plantilla. Las clases derivadas heredan características de su clase base, pero

añaden otras características propias nuevas.

Las clases que heredan propiedades de una clase base pueden a su vez servir como definiciones base de otras clases.

Las jerarquías de clases se organizan en forma de árbol.

Ser vivo

Mamífero Ave Pez

Page 27: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

27

Herencia (III)

Normalmente se representa mediante una flecha que parte de la subclase y que apunta a la superclase.

Persona

DNINombre

Empleado

Sueldo

Obtener_DNI()

Aumentar_sueldo()

Características de Persona: Nombre DNI Obtener_DNI()

Características de Empleado:

Nombre DNI Sueldo Obtener_DNI() Aumentar_sueldo()

Page 28: Conceptos Fundamentales de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

28

Herencia múltiple

Se produce cuando una clase tiene dos o más ascendientes inmediatos.

Puede resultar problemática: compartición de características con el mismo nombre heredadas por caminos jerárquicos diferentes.

Vehículo Terrestre

VehículoAcuático

VehículoAnfibio