Principios de POO

Tipo Abstracto de Dato y Modificadores de Acceso

Un tipo abstracto de dato define un conjunto de valores y las operaciones que se pueden realizar sobre dichos valores. Los modificadores de acceso son palabras reservadas que se anteponen a la declaración de los miembros de una clase para indicar cómo se puede acceder a ellos desde el exterior de la clase.

  • Public: Accesible desde el exterior de la clase utilizando la referencia al objeto.
  • Protected: Visible en las subclases y accesible desde las clases del mismo paquete.
  • Sin modificador: Únicamente accesible desde las clases del mismo paquete.
  • Private: No accesible desde el exterior de la clase.

Atributos y Métodos Estáticos

Los atributos estáticos se mantienen a nivel de clase, no a nivel de objeto. Mantienen información sin necesidad de crear un objeto. Los métodos estáticos modelan mensajes cuyo receptor es la clase, no sus objetos. Son necesarios cuando se quiere invocar un método sin crear un objeto. Solo pueden invocar a métodos estáticos y acceder a atributos estáticos.

Objetos, Relaciones y Clases

Un objeto es la encapsulación de un estado o comportamiento. «Un objeto es una instancia de una clase».

Relaciones entre Objetos:

  • De asociación: Expresa una conexión (unidireccional o bidireccional) entre objetos de las clases implicadas en la asociación.
  • De composición: Un mecanismo de abstracción donde una clase tiene objetos de otras clases como miembros.
  • De uso: Un objeto de la clase A usa una clase B cuando no contiene variables de instancia del tipo B, pero utiliza alguna instancia de la clase B como parámetro o variable local en alguno de sus métodos, y utiliza algún método estático de la clase B.

Una clase es una categoría que agrupa un conjunto de objetos. Una clase define: los atributos de los objetos, la interfaz de los objetos y el comportamiento de los objetos.

Polimorfismo

El polimorfismo es la capacidad de una entidad de referenciar distintos elementos en distintos instantes de tiempo.

  • T1. Sobrecarga: Un solo nombre de método y muchas implementaciones distintas. Los métodos sobrecargados se distinguen en tiempo de compilación debido a que tienen distintos parámetros.
  • T2. Sobreescritura: Un tipo especial de sobrecarga que sucede en la herencia con enlace dinámico. Los métodos sobrecargados definidos en la superclase son refinados o reemplazados en las subclases.
  • T3. Variables polimórficas: Variables que se declaran como un tipo pero que se referencian en realidad a un valor de un tipo distinto (relación mediante herencia).
  • T4. Genericidad: Clases o métodos parametrizados (con elementos por definir). Forma de crear parámetros de propósito general (clases, métodos) y especializarlas para situaciones específicas.

Tipos de Sobrecargas

  • 1. Basada en ámbito: Métodos con diferentes signaturas en el mismo ámbito. Distintos ámbitos implican que el mismo nombre de método puede aparecer en ellos sin ambigüedad. La signatura puede ser igual.
  • 2. Basada en signatura: Métodos con diferentes signaturas en el mismo ámbito. Java permite sobrecarga de manera implícita. La signatura no puede distinguirse únicamente por el tipo de retorno. Java permite sobrecarga de métodos, no de operadores.
  • 3. Sobrecarga en jerarquía de herencia:
    • Shadowing: Métodos en la superclase y en una subclase con el mismo nombre, la misma signatura y enlace estático. No existen en Java.
    • Redefinición: Métodos en la superclase y en una subclase con el mismo nombre, distinta signatura y enlace estático. La subclase define un método con el mismo nombre que la superclase, pero con distintos parámetros (números o tipos).
    • Sobreescritura: Métodos en la superclase y en una subclase con el mismo nombre, la misma signatura y enlace dinámico.

Clase Abstracta vs. Interfaz

Una clase abstracta tiene como mínimo un método abstracto, puede tener variables de instancia y algunos métodos implementados. No se puede crear un objeto de una clase abstracta. Una subclase de una clase abstracta debe sobrescribir una implementación para cada método abstracto de su superclase. Solo puede heredar de una clase.

Una interfaz permite definir un tipo de modo abstracto. Todos sus métodos son abstractos. No tiene constructor. No puede tener variables de instancia. Una interfaz puede heredar de varias interfaces.

Herencia

La herencia es el mecanismo de implementación por el cual elementos más específicos incorporan la estructura y comportamiento de elementos más generales.

  • T1. Según su número de superclases:
    • Simples: Una única superclase. En Java solo puede ser simple.
    • Múltiple: Más de una superclase.
  • T2. Según su implementación:
    • Implementación: Hereda la implementación de los métodos, pero puede sobrescribirse.
    • Interfaz: Solo se hereda la interfaz. No hereda código, ni constructor, ni variables de instancia. Puede heredar de varias interfaces.

Ventajas de la herencia: Reutilización de código, compartición del código, consistencia de interfaz, construcción rápida de prototipos, modelado rápido de prototipos, ocultación de información, polimorfismo.

Inconvenientes de la herencia: Velocidad de ejecución, tamaño del programa.

Modificadores de clases:

  • Public: Indica la visibilidad de la clase.
  • Abstract: Indica que la clase tiene algún método sin especificar y no se pueden crear instancias de esta clase.
  • Final: No se va a heredar de ella.
  • Extends: Palabra reservada que indica que esta clase es una subclase de otra.

Conversión y Enlaces

Conversión:

  • Upcasting: Convertir un objeto de una subclase en un objeto de superclase.
  • Downcasting: Lo contrario de upcasting.

Enlaces: El momento en que se identifica el fragmento de código a ejecutar asociado a un mensaje (llamada a método) o el objeto concreto asociado a una variable.

  • Estático: En tiempo de compilación.
  • Dinámico: En tiempo de ejecución.

Excepciones

Una excepción es un error o evento que se produce durante la ejecución de un programa, interrumpiendo el flujo del programa.

  • Unchecked: Irrecuperables y detectadas directamente por Java. No es necesario capturarlas (NullPointerException).
  • Checked: Obligan al programador a tratarlas, capturarlas o programarlas (IOException).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.