Introducción a la Orientación por Objetos OxO

Anuncio
Asignatura: Programación 2
Unidad 2: Orientación por Objetos
Tema 1: Orientación por Objetos
Unidad II: Introducción a la Orientación por Objetos OxO
Origen de la Programación Orientada por Objeto OxO
Problemas en el desarrollo del software: La crisis del software, a finales de los años 60 (dio origen a
la ingeniería del software), la cual se caracterizaba por:
1. Imprecisión de planes y costos.
2. Baja productividad
3. Baja calidad del producto (alto costo, baja flexibilidad, confiabilidad y adaptabilidad,
etc.).
4. Insatisfacción del cliente
5. Retraso en la entrega.
6. Altísimos costos del desarrollo (en comparación con hardware)
7. Complejidad creciente de los requerimientos (superan las tecnologías disponibles)
8. Complejidad de mantenimiento.
La O x O emerge como una nueva respuesta alternativa al enfoque estructurado, en la búsqueda
de soluciones a la tan conocida crisis. La crisis se manifiesta en:
•
Dificultad de los cambios de desarrollo de software para cumplir con los tiempos de
entrega y los costos de desarrollo estimados inicialmente.
•
Dificultad para satisfacer los requerimientos del usuario.
La O x O contribuye a aminorar estos problemas y trae como ventajas:
1. Mayor
manipulación
de
la
complejidad
inherente
del
software
(abstracción,
descomposición y jerarquización)
2. Mejor reutilización de componentes de software.
3. Reducción de costos y tiempos de desarrollo.
4. Uso de un único paradigma de desarrollo para análisis, especificación, diseño y
programación.
¿Qué es la O x O?
Es un paradigma de desarrollo de software que modela las entidades de un dominio de
aplicación en una forma natural en términos de objetos.
paradigma: enfoque, punto de vista, forma de pensar.
Entidad: todo lo que existe (real o ideal, tangible o intangible)
Dominio de aplicación: porción del mundo real donde está enmarcado la situación o
problema.
Objeto: unidad de software que modela a una entidad (estado y dinámica de la entidad).
La O x O tiene un basamento formal en la Ontología.
Ontología: “Teoría del ente, intento de clasificar los entes, intentos de definir la estructura de cada
ente, de cada tipo de ente y será también la teoría del ser en general, de lo que todos los entes
tienen en común, de lo que los cualifica como entes”. ( Morente, 1983).
Antes del mundo real era imperativo, jerárquico, funcional y relacional. Ahora con la OxO el
mundo real es la agregación de cosas o entidades que poseen propiedades, se relacionan entre
sí, obedecen a leyes, tienen un estado transformable por eventos y cambian. Esto no es más que
la aplicación de los principios ontológicos (Aristóteles) sobre el análisis de un dominio de
aplicación generando así un nuevo paradigma.
Principios Ontológicos:
•
El mundo está compuesto por entidades.
•
Las entidades se conocen a través de sus propiedades (características, atributos).
•
Cada entidad cambia (tiempo, cambio en atributos)
•
Los cambios de estado son ocasionados por eventos (tiempo)
•
Todo evento da inicio a un proceso (secuencia de eventos)
•
Cada entidad acata leyes (relación entre propiedades)
•
Una entidad puede ser simple o compuesta.
•
Las propiedades permiten agrupar conceptualmente a las entidades en clases o especies
(conjunto de entidades)
•
Las entidades se agrupan en sistemas.
La O x O captura el dominio de aplicación en términos de cosas o entidades que le componen
usando: La estructura (estado) y el comportamiento (cambio de estado) de las entidades.
Constructos del Modelado OxO:
Ontología
modelado OxO
Tipos de Datos
Abstractos (TDA)
Lenguaje de
programación
C++
Objeto
Clase
Clase base
Clase derivada
Miembro
Cosa o entidad
Especie
Objeto
Clase
Variable del TDA
TDA
Propiedad, ley
Atributo
Campos de la
estructura de
datos del TDA
Datos miembros
Acción
Método
Función miembro
Evento
Mensaje
Operación del
TDA
Llamada a la
operación
Llamada a
función
Lenguaje de
programación
Java
Objeto
Clase
Metaclase
Interface
Paquete
Campo
Variable tipo
primitivo,
referenciado,
estática.
Método
Constructor
Llamada a
método
Definición de objeto
Un objeto es la representación de una entidad en un dominio de aplicación. Un objeto tiene:
a) Una identidad única
b) Un estado (conjunto de valores de sus atributos)
c) Un comportamiento (conjunto de operaciones que transforman o tienen acceso al
estado del objeto.
El identificador de un objeto: es el nombre único independiente del valor y localización del
objeto. La identidad no tiene que ver con sus propiedades sino con su existencia (dos objetos
distintos no son iguales aunque todos los valores de sus propiedades sean iguales).
Definición de Clase (equivalente a la definición de un TDA)
Una clase representa una colección de entidades que tienen un conjunto de propiedades
comunes. Una clase define la estructura (atributos, estado) y el comportamiento (operaciones)
de un conjunto de entidades.
Definir una clase consiste en determinar 3 elementos:
1. Nombre de la clase
2. Atributos (estado)
3. Métodos (comportamiento)
* Se representa gráficamente con el siguiente diagrama:
Nombre de la Clase
Atributos de la Clase
Métodos de la Clase
NOMBRE DE LA CLASE
Nombre_atributo1: tipo_dato1
Nombre_atributo2:tipo_dato2
.
.
.
Nombre_método1(<listaargumentos>):tipo_result1
Nombre_método2(<listaargumentos>):tipo_result2
.
.
.
Por ejemplo: Definimos la clase complejo (TDA complejo, especificada anteriormente,
tema TDA).
Complejo
PReal: Real
PImaginaria: Real
Llenar (Real, Real)
Sumar (Complejo, Complejo)
Multiplicar (Complejo, Complejo)
Igual (Complejo): Booleano
Real (): Real
Imaginaria (): Real
Nota: Como puede verse, los argumentos y
valores de cada operación del TDA son
ahora diferentes (sutilmente) en los métodos
de la clase complejo. ¿Por qué?
Nota: Un objeto de una clase
sólo son los valores de los atributos
de una clase.
A partir de esta clase Complejo, puedo fabricar (instanciar) “infinitos” objeto. Por ejemplo:
5
7.8
12.45
67
45
4
1
0,44
Estas son objetos instanciados de la Clase Complejo
Nota: Cada objeto tiene sus propios valores de los atributos y
comparte los nombres de los atributos en la clase
En O x O, la definición de una clase permite obtener un verdadero “encapsulamiento” del estado
(estructuras) de los objetos que pertenecen a la clase. Esto se logra a través de los modificadores
de acceso, que controlan y restringen el uso de los atributos y métodos de una clase. Los
modificadores de acceso son básicamente tres (03):
• Público: Accesible desde cualquier parte en la que el objeto se encuentre (tenga
alcance).
• Privados: Sólo accesible a métodos de la clase.
• Protegidos: Sólo accesible a través de las relaciones entre objetos (herencia,
composición).
Cada lenguaje de programación O x O puede tener o agregar otros tipos de modificadores de
acceso, pero estos son los básicos.
Definición de Método (Equivalente a las operaciones del TDA)
Representa una operación o proceso que se ejecuta sobre las entidades de una misma especie
(instancias de una clase = objetos)
Definidos por: Nombre_método (<lista_argumentos>): <tipo_retorno>
Métodos especiales en la O x O:
• Constructor (en general en todo lenguaje de programación)
• Destructor (sólo en C++, se usa para el manejo de memoria dinámica)
El constructor es un método que se utiliza para inicializar los atributos de los objetos de la clase.
Tiene las siguientes características:
• Se invoca cuando se crea el objeto de la clase.
• Puede recibir argumentos.
• Tiene el mismo nombre de la clase.
• No tiene valor de retorno.
Por ejemplo, en la clase complejo su constructor sería:
Æ Complejo()
Su codificación sería (inicializa en 0 los atributos):
Complejo(){
PReal = 0
PImaginaria = 0
}
El destructor (sólo usado en C++) es un método especial que también se llama implícitamente (al
desfavorecer el objeto). Se identifica con el nombre de la clase con el carácter “~” delante. A
diferencia del constructor no puede recibir parámetros ni tampoco retorna valor.
Definición de Mensaje:
Está asociado a un evento del dominio de aplicación y señala el momento en el que debe
ejecutarse un método sobre un objeto determinado. El mensaje asocia un método a un objeto.
No puede existir un mensaje sin objeto.
El formato de un mensaje es el siguiente: Objeto_receptor . nombre_método (<argumentos>)
El punto “.” Establece la relación objeto_método
Por ejemplo en la clase complejo se tendría:
Complejo A // crea el objeto A de la clase complejo
A.llenar (10,5.8) // Mensaje: ejecuta el método Llenar (con sus atributos) sobre el objeto A.
Ejercicios:
a) Para asegurarse que comprende los conceptos de O x O trate de dar respuesta a las siguientes
preguntas:
• Diferencia y semejanzas entre la O x O y TDA.
• Relación entre clase y objeto
• Relación entre método y mensaje.
• Diferencia entre atributo y método.
• ¿ Qué es instanciación de un objeto? ¿ qué se instancia?
• Significado de “encapsulamiento”.
• ¿Cuáles son los modificadores de acceso para los componentes de una clase y por qué?
b) Investigue como definir e implementar los métodos de una clase en C++ y Java. Como
práctica transforme el TDA Complejo en una clase en C++
c) Modele OxO (defina la clase: especificar nombre, atributos y métodos con argumentos y
retorno) de las siguientes entidades:
• Estudiante
• Punto en el espacio bidimensional
• Conjunto de elementos del mismo tipo (homogéneos)
• Características del conjunto: no hay orden y no hay elementos duplicados
• Secuencia de elementos del mismo tipo (homogéneos)
• Características de la secuencia: hay orden secuencial (canónico) y puede tener
elementos duplicados.
• Tiempo (hora)
• Cuenta bancaria
• Producto en venta de un supermercado
• Número racional (fracción, formado por numerador y denominador).
• Fecha (describe el día)
• Empleado de una empresa
• Vehículo (para un estacionamiento por ejemplo)
• Cola de elementos del mismo tipo (homogéneos)
• Características de la cola: es una secuencia en donde los elementos son insertados por un
extremo de la lista y si son eliminados y accesado por el otro extremo.
• Matriz (vector bidimensional)
• Libro (para una biblioteca)
• Materia o asignatura (para el pensum de una carrera)
Descargar