Programación orientada a objetos

“Deshazte de vicios a la hora de programar y empieza nuevamente”

Generalmente estamos acostumbrados a usar una metodología de programación que se conoce también como la «programación spaguetti», dicha técnica no nos permite construir software con responsabilidades únicas y hace que se viole el principio de «Alta integridad, bajo acomplamiento».

¿Entonces qué es la programación orientada a objetos?

Por sus siglas POO o del inglés OOP, es un paradigma que se basa en identificar las entidades más relevantes de un problema y como estas se comportan para resolverlo.

Entidad

Es una representación de cualquier cosa del mundo real

Conocimiento de las entidades

Para poder resolver un problema de orientación a objetos, es necesario identificar las características y comportamientos de las diferentes entidades involucradas en un problema.

Objeto

Podría definirse como una unidad de programa que tiene un estado y un comportamiento.

Clase

Es una representación genérica o plantilla de un objeto

En la programación orientada a objetos existen también dos conceptos fundamentales que se listan a continuación

  • Atributo: Son las características que individualizan un objeto y definen el estado
  • Método: Son las acciones que realiza un objeto y definen el comportamiento

Constructores

Son métodos especiales para la creación de los objetos, su función principal es inicialos.

Caracteríasticas de los constructores

  • En el caso de java, poseen el mismo nombre de la clase, en lenguajes como swift se declara con init() y en TypeScript se declara con constructor()
  • No tienen retorno
  • No pueden ser heredados

Tipos de constructores

  • Por defecto: No reciben parámetros
  • Parametrizados o personalizados: Reciben parámetros

Otros conceptos clave

Abstracción: Se podría decir que son las características específicas de un objeto, por tanto este tipo de enfoque es externo, es decir donde se define la responsabilidad o compromiso.

Encapsulamiento: Es el proceso de almacenar en una misma sección los elementos de una abstracción que constituyen su estructura y su comportamiento y consigue a través de la ocultación de información.

Del encapsulamiento surgen los niveles de acceso o también conocidos como modificadores de acceso, los cuales se nombrarán a continuación y el orden es citado desde el menos restrictivo al más restrictivo.

  • Público (public): Es el menos restrictivo y se puede acceder a la información desde cualquier parte del programa, en pocas palabras, define lo que es visible. En UML se representa con el signo (+)
  • Default o package: Sólo es visible entre clases que se encuentren en el mismo paquete
  • Protegido (protected): Solamente es accesible dentro de su clase y por subclases. En el UML se representa con el signo (#)
  • Privado (private): Es el más restrictivo, es decir que solamente es accesible desde la propia clase. En UML se representa con el signo (-)

En el siguiente ejemplo podremos ver de manera gráfica una clase y sus diferentes objetos

En UML (Unified Modeling Language) se podría hacer la misma representación, mediante un diagrama de clases

clase carro

Codificación de la clase en diferentes lenguajes de programación

En el mercado existen diferentes lenguajes de programación orientados a objetos y en estos existen pequeñas variaciones al momento de programar, a continuación se codificarán en sus respectivas sintaxis y con sus diferentes constructores.

En java

Ver reglas de nombramiento en java

En TypeScript

Instancia

Es el objeto en ejecución, por tanto en un pograma de pueden tener muchas instancias, en el ejemplo del carro, mencionado en el ejemplo anterior, vemos que la clase carro tiene 3 instancias

Multiplicidad

Determina cuántos objetos de cada tipo intervienen en una relación, es decir, es el número de instancias de una clase que se relacionan con el número de instancias de la otra clase.

Asociación

Es una relación estructural que describe una conexión entre objetos

asociación unidireccional y bidireccional

Multiplicidad

La multiplicidad de una asociación determina cuántos objetos de cada tipo intervienen en una relación. En resumen, es el número de instancias de una clase que se relacionan con el número de instancias de la otra clase.

Multiplicidad

Interface

Es un conjunto de métodos cuya finalidad es determinar el funcionamiento de una clase. Se caracteriza por no tener los métodos implementados, por tanto solo se declara la firma de los método (retorno, nombre, parámetros).

Las interfaces forman contratos entre las clases que la implementan y el mundo real.

interface contrato orientado a onjetos

Herencia

Es un mecanismo que permite la definición de una clase a partir de otra ya existente. Por tanto, se permite compartir  automáticamente datos entre clases, subclases y objetos.

Cuando se habla de herencia, se clasifican las clases padre y las clases hijas

advertencia herencia programación orientada a objetos
Java ,C#  NO aceptan herencia múltiple, es decir que no se puede heredar más de una clase

Is-A: indica que a clase X es del tipo Y. En el caso de java se logra a través de extends o implements •Al término Is-A también se le puede llamar: derived, subclass, inherits o subtype. •A las superclase también se le conoce como “superclase”

Has-A: Indica que la clase A tiene una variable de instancia que contene una referencia a B.

Sobrecarga de métodos (Overloading)

Permite utilizar el mismo nombre del método pero con parámetros diferentes, es decir que tenga diferente firma (signature).

Sobreescritura de métodos (Overriding)

Es la forma por la cual una clase que hereda o implementa puede redefinir los métodos de su clase o interface, respectivamente, de esta manera se pueden crear nuevos métodos con el mismo nombre de su superclase.

Polimorfismo

Quiere decir “muchas formas” y se refiere a la propiedad para programar objetos con características comunes y que todos compartan la misma superclase en una jerarquía de clases, como si todas fueran objetos de una misma clase

Polimorfismo orientado a objetos

Clase Abstracta

Es una clase que no se instancia, por lo tanto, no se crean objetos de esta. En español se llama clase resumen, esta clase se usa como superclase de otras.

Se usa cuando hay un comportamiento común entre las subclases, pero se interpreta de forma diferente.

Particularidade de una clase abstracta

  • Los  métodos no tienen cuerpo
  • Las subclases de que heredan de una clase abstracta, deben implementar los métodos abstractos
  • Si se declara un método abstracto, la clase que lo contiene debe ser abstracta, pero no viceversa.
clase abtracta