25 Sep

Programación Orientada a Objetos (POO)

Introducción

La POO es un conjunto de técnicas para obtener calidad interna como medio para obtener calidad externa (Reutilización y Extensibilidad).

Calidad del Software

Corrección: Capacidad del software de realizar con exactitud su tarea, tal y como es definida en la especificación.

Robustez: Capacidad de que el software reaccione adecuadamente ante situaciones excepcionales.

Extensibilidad: Facilidad de adaptación de los productos software a los cambios en la especificación (Simplicidad y Descentralización).

Reutilización: Capacidad del producto software de ser utilizado en la construcción de diferentes aplicaciones.

Compatibilidad: Facilidad de combinar unos elementos software con otros.

Eficiencia: Requerir la menor cantidad posible de recursos hardware.

Portabilidad: Facilidad de transferir productos software a diferentes plataformas.

Facilidad de uso: Facilidad con la que personas con diferentes niveles de experiencia pueden aprender a usar los productos software y aplicarlos a resolver problemas (instalación, operación y supervisión).

Funcionalidad: Conjunto de posibilidades ofrecido por un sistema.

Oportunidad: Es la capacidad de un sistema software de ser lanzado cuando los usuarios lo desean, o antes.

Conceptos Fundamentales

Abstracción

Capacidad de centrarse en las características esenciales de las distintas partes de un sistema, ignorando sus propiedades accidentales.

Encapsulación

Proceso de almacenar en un mismo compartimento los elementos de una abstracción que constituyen su estructura y su comportamiento.

Tipos de Datos

Es un conjunto de valores y un conjunto de operaciones definidas por sus valores.

TAD (Tipo Abstracto de Datos)

Es un tipo de datos que consta de datos y operaciones que se pueden realizar sobre esos datos (TIPO: FUNCIONES: AXIOMAS: INVARIANTES:).

Módulo

Unidad básica de descomposición de un sistema software.

Modularidad

Propiedad que tiene un sistema que ha sido descompuesto en un conjunto de módulos cohesivos y débilmente acoplados.

Alta cohesión: Un módulo con responsabilidades altamente relacionadas y que no hace una gran cantidad de trabajo.

Bajo acoplamiento: Los módulos se comunican mediante interfaces bien definidas.

Favorece:

  • Comprensión modular
  • Continuidad modular
  • Protección modular

Diseño Modular

Descomposición

Descomponer el problema del software en pequeños subprogramas menos complejos, interconectados mediante una estructura sencilla y suficientemente independientes.

Composición

Los elementos software deben combinar libremente unos con otros para producir nuevos sistemas.

Comprensibilidad

La fácil comprensión de cada módulo sin tener que conocer los otros.

Continuidad

La realización de un pequeño cambio solo debe afectar a un módulo o en un pequeño número de módulos.

Protección

Si surge una situación anormal durante la ejecución debe quedar confinado o como mucho debe afectar a pocos módulos vecinos.

Principios de Diseño Modular

  • Ocultación de Información
  • Auto-documentación
  • Acceso Uniforme
  • Abierto/Cerrado
  • Elección Única

¿Qué es la POO?

(Colección estructurada de clases) Un método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada una de las cuales representa una instancia de alguna clase, y cuyas clases son todas miembros de una jerarquía de clases unidas mediante relaciones de herencia.

Clase

Implementación total o parcial de un TAD. Una clase es un módulo y un tipo de dato.

Objeto

Una instancia de una clase.

Herencia

Se establece una estructura jerárquica en la que cada clase hereda atributos y métodos de las clases que están por encima de ella. La clase derivada (Subclase) puede usar los procedimientos y los atributos de su SuperClase.

Cada subclase puede tener nuevos atributos y métodos y/o redefinir los heredados.

Objetivo: permitir el análisis por clasificación.

Ventajas: granularidad, reutilización.

Herencia Simple: una clase hereda de una única superclase.

Herencia Múltiple: una clase hereda de varias superclases.

Ventajas de la Herencia

  • Reutilización de software.
  • Mayor seguridad, menor coste.
  • Reutilización de componentes.
  • Rápido prototipado.
  • Consistencia de la interface.
  • Comportamiento similar de todas las clases que heredan de una superclase.

Asociación

Es una conexión entre clases, una conexión (enlace) semántica entre objetos de las clases implicadas en la relación. Esto se consigue usando algún objeto de una de las clases como atributo de la clase asociada.

Agregación (Composición)

Se da cuando una clase está estructuralmente compuesta de otras clases. Una clase está formada por objetos de objetos (objeto compuesto) de otra u otras clases. Para la existencia del objeto compuesto deben existir los demás objetos.

Cardinalidad

Número de instancias de una clase que están relacionadas con una instancia de la otra clase.

Encapsulación

Técnica que permite localizar y ocultar los detalles de un objeto respecto al usuario, aislándolo del aspecto interno.

Cohesión

Es una medida de cuánto están relacionados lógicamente los componentes encapsulados en un objeto.

Polimorfismo

Significa tener o asumir distintas formas.

En el contexto de POO se refiere a la capacidad de los diferentes objetos para responder de distinta forma a la misma operación. Esta característica habilita al programador para tratar uniformemente objetos que provienen de clases diferentes.

Deja un comentario