Publicado el 3 de Julio del 2017
1.736 visualizaciones desde el 3 de Julio del 2017
4,8 MB
116 paginas
Creado hace 18a (06/11/2006)
Programación Orientada a Objetos
Tema 3: Propiedades Básicas de la
Orientación a Objetos
Eduardo Mosqueira Rey
LIDIA
Laboratorio de Investigación y
desarrollo en Inteligencia Artificial
Departamento de Computación
Universidade da Coruña, España
Objetivos
• Conocer y analizar las principales propiedades
de la orientación a objetos
• Estas propiedades incluirán aquellas que son
compartidas por los tipos abstractos de datos
(como abstracción, encapsulación,
modularidad), como aquellas propias de la
orientación a objetos (herencia, polimorfismo,
ligadura dinámica, etc.).
• Estudiar cómo un lenguaje como Java
implementa, en mayor o menor medida, dichas
propiedades básicas.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
2
Índice
1. Abstracción
2. Encapsulamiento
3. Modularidad
4. Jerarquía
5. Polimorfismo
6. Tipificación
7. Ligadura dinámica
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
3
Índice
1. Abstracción
– Definición y características
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
4
Abstracción
Definición y características
• Definición
• Características
– Representación de las características fundamentales de algo
sin incluir antecedentes o detalles irrelevantes
– Es uno de los métodos fundamentales para enfrentarse a la
complejidad inherente al software (ya visto en los TADs).
– La OO fomenta que el uso de abstracciones en los datos y
procedimientos para simplificar la descripción del problema
– El elemento clave de la abstracción es la clase
• Clase ≡ Descripción abstracta de un grupo de objetos, cada uno de
los cuales se diferencia por su estado específico y por la
posibilidad de realizar una serie de operaciones.
– Ejemplo, Esfera
• Estado: coordenadas del centro y radio
• Operaciones: mover el centro, cambiar el radio.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
5
Índice
2. Encapsulamiento
– Definición y características
– Ventajas
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
6
Encapsulamiento
Definición y características
• Definición
– Proceso de almacenar en un mismo compartimiento los elementos de
una abstracción que constituyen su estructura y su comportamiento
• Características
– Abstracción y el encapsulamiento son conceptos complementarios:
• La abstracción se centra en el comportamiento observable de un objeto
• El encapsulamiento se centra en la implementación que da lugar a ese
comportamiento.
– El encapsulamiento también implica ocultación de información
• Cada objeto revela lo menos posible de su estructura interna
• parte pública ⇒ interfaz, parte privada ⇒ implementación.
– Ejemplos
• Una operación es vista por sus usuarios como si fuera una simple entidad,
aunque está formada por una secuencia de operaciones a bajo nivel.
• Un objeto es visto como un simple objeto en vez de como una composición
de sus partes individuales.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
7
Encapsulamiento
Ventajas
• Ventajas
– La supresión de los detalles de bajo nivel nos
permite razonar acerca de la operación u objeto de
forma más eficiente.
– Un cambio en la representación de una abstracción
puede no obligar a un cambio en los clientes que la
utilicen
• Cambios en el diseño que no afecten al interfaz no se
propagan
– Java
• Podemos cambiar una función por otra más eficiente sin
afectar a los usuarios de dicha función
• Muy importante ya que facilita el mantenimiento del software
• La encapsulación se consigue a través del concepto de
clase combinado con los especificadores de acceso que
limitan la visibilidad de los atributos y métodos.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
8
Índice
3. Modularidad
– Definición y características
– Modularidad en Java
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
9
Modularidad
Definición y características
• Definición
– Propiedad que tiene un sistema que ha sido descompuesto en
un conjunto de partes o módulos que sean cohesivos y
débilmente acoplados
• Cohesivos ≡ agrupan abstracciones que guardan relación lógica
• Débilmente acoplados ≡ minimizan las dependencias entre módulos
• Ventajas
– El hecho de fragmentar un programa en componentes
individuales suele contribuir a reducir su complejidad
– Permite crear una serie de fronteras bien definidas y dentro del
programa ⇒ aumenta la comprensión del mismo.
• Sinergia entre abstracción, encapsulamiento y
modularidad
– Un objeto proporciona una frontera bien definida alrededor de
una sola abstracción, el encapsulamiento y la modularidad
proporcionan barreras que rodean a esa abstracción.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
10
Modularidad
Definición y características
• Abstracción, Encapsulamiento y Modularidad
mensaje
Módulo
Objeto 1
Estado
Interfaz
Objeto 3
Estado
Interfaz
Objeto 2
Estado
Interfaz
Parte pública
Parte privada
Objeto 5
Estado
Interfaz
Objeto 4
Estado
Interfaz
11
Modularidad
Modularidad en Java
• Clases
– Encapsulan los atributos y métodos de un tipo de
objetos en un solo compartimiento
– Ocultan, mediante los especificadores de acceso, los
elementos internos que no se pretende publicar al
exterior.
– Esta protección es altamente configurable al existir
varios niveles de acceso:
• public
• protected
• por defecto (package)
• private
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
12
Modularidad
Modularidad en Java
• Ficheros
– Unidades físicas de compilación
– Dentro de un fichero “.java” pueden residir varias
clases con las siguientes restricciones
• Sólo puede haber una clase pública por fichero
• El nombre del fichero debe ser el mismo que el de la clase
• Si no existe ninguna clase pública tampoco existe ninguna
restricción con respecto al nombre del fichero
pública
– Compilación
• La compilación de un fichero “.java” genera tantos ficheros
“.class” (bytecodes) como clases existen en dicho fichero
• Para facilitar la compilación Java recompila los ficheros
“.java” si tienen el mismo nombre que un fichero “.class”
pero con una fecha posterior.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
13
Modularidad
Modularidad en Java
• Paquetes
– Unidades lógicas de agrupación de clases
– Las clases pueden ser
• Públicas: forman parte del interfaz de su paquete
• No públicas: sólo son visibles a clases de su mismo paquete
• Definición
– Se utiliza la directiva package al principio de cada fichero.
– En caso de que no se especifique paquete se considera que todas las
clases que se encuentran en el paquete por defecto
• Jerarquías de paquetes
– El nombre del paquete puede tener varios niveles, lo que facilita su
organización (java.util, java.util.jar, java.awt, java.awt.color, etc.).
– De todas formas no existe el concepto de subpaquete ni relaciones
jerárquicas entre paquetes (la relación entre java.util y java.util.jar es la
misma que entre java.util y javax.swing ⇒ son dos paquetes distintos).
– Simplemente se permite una organización jerárquica de los nombres
de los paquetes por motivos de organización y claridad
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
14
Modularidad
Modularidad en Java
• Objetivos de los paquetes:
– Diseñar un dispositivo de modularidad de nivel superior a las
clases.
• Cada paquete puede tener sus propias clases privadas
desconocidas para aquella persona que quiera utilizar el paquete.
– Agrupar clases con funcionalidades similares.
• De forma que sean más fáciles de localizar y pueda verse
claramente que las clases están relacionadas.
– Organizar físicamente los ficheros fuente.
• Para poder utilizar las clases compiladas, los ficheros .class deben
estar disponibles en el directorio indicado por la variable de
entorno CLASSPATH.
• Para organizar el directorio del CLASSPATH Java equipara los
nombres de paquetes con los directorios en disco (Java buscará
las clases del paquete com.miempresa.utils en el directorio
CLASSPATH/com/miempresa/utils).
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
15
Modularidad
Modularidad en Java
• Objetivos de los paquetes (cont.):
– Prevenir conflictos de nombre y favorecer la
reutilización.
• Los nombre de las clases pueden entrar en conflicto, para
evitarlo la clase se compone de el nombre del paquete al que
pertenece, un punto y el nombre de la clase
• Pueden existir conflictos con los nombres de los paquetes
• Para evitar esto existe el convenio de utilizar como prefijo a
los nombres de los paquetes los nombres invertidos del
dominio de Internet de la empresa que los ha desarrollado
• Ejemplo, los paquetes de Borland tendrían el prefijo
“com.borland”, los paquetes del OMG tendría el prefijo
“org.omg”, etc.
• Los nombres de dominio no pueden repetirse, evitando así
los posibles conflictos
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
16
Modularidad
Modularidad en Java
• La sentencia import
– Para simplificar la sintaxis y no tener que introducir un nombre
largo de paquete cada vez que se utiliza una clase puede
utilizarse la sentencia import al principio de cada fichero
– De esta forma puede utilizarse el nombre de la clase sin indicar
el paquete al que pertenece
– La sentencia import puede utilizarse de dos formas distintas:
• import nombrepaquete.* ⇒ importa todas las clases del paquete
• import nombrepaquete.Clase ⇒ imp
Comentarios de: Programación Orientada a Objetos - Tema 3: Propiedades Básicas de la Orientación a Objetos (0)
No hay comentarios