Conceptos Fundamentales de POO
Transcript of 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
©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
©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.
©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.
©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.
©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.
©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.
©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.
©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.
©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
©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
©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); ……………};
©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 ();};
©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.
©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.
©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};
©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).
©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
©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.
©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()
©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.
©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)
©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.
©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
©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.
©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
©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()
©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