MSI101, Tarea 3

Ensayo: ¿Qué es la Programación Orientada a Objetos?

La Programación Orientada a Objetos (POO) es un paradigma basado en la idea de objetos que tienen diferentes atributos y comportamientos. Dichos objetos pueden interactuar con otros objetos exponiendo algunos de sus comportamientos y atributos mientras mantienen el resto ocultos e inaccesibles del mundo exterior.1

En la POO existen diferentes conceptos que son clave para el entendimiento y uso de la misma. Los mas importantes son:

Clase: Plantilla (receta) en la que se define la estructura (propiedades) y comportamiento (métodos) que sera después usada para crear objetos (instancias).

Propiedad: Posición en la memoria de la computadora en la que se pueden almacenar valores conocidos o desconocidos y que pueden cambiar durante la ejecución de un programa.

Método: Grupo de instrucciones agrupadas de tal forma que permiten ser reutilizadas multiples veces dentro del mismo programa.

Objeto: Instancia de una clase.

Encapsulación: Técnica mediante la cual se evita que variables o lógica de la clase puedan ser usadas (leídas, modificadas) fuera de la misma de forma directa.

Composición: El uso de objetos dentro de otros objetos.

Herencia: Capacidad de definir nuevas clases (subclases) a partir de otras ya existentes. En muchos casos las subclases pueden no solo definir nuevas propiedad y métodos, sino cambiar el comportamiento de las ya existentes en la clase original.

Polimorfismo: Permite que diferentes subclases realicen diferentes comportamientos a partir de un mismo método definido en la superclase. Un ejemplo es el calculo del perímetro y area de diferentes figuras geométricas, la super clase solo define el nombre de los métodos y la forma a regresar el valor, y las subclases definen la lógica para calcular los resultados a partid de sus diferentes valores y formulas.

Diferencias con la programación estructurada

En programación estructurada el código se organiza generalmente en funciones y módulos, los cuales son después exportados o compartidos con otras funciones y módulos. Cuando se quiere reutilizar y/o modificar el comportamiento de una función se puede hacer mediante diferentes técnicas como mixin, currying, hooks y lambdas, por mencionar algunos.

Ejercicios

  1. Utilizando el lenguaje de programación de tu elección definir 4 clases y que en al menos 2 de estas se maneje la herencia.
  2. Demostrar cómo se crea un objeto en el lenguaje de programación seleccionado por el estudiante y cómo se accede a los métodos.
  3. Definir al menos un programa en el que se muestre 4 de los principales conceptos de la programación orientada a objetos y se pueda ejecutar en el lenguaje de programación Java.
/**
 * Main
 */
public class Main {

  // Demuestra composición al usar otros objetos dentro de un objeto.
  public static void main(String[] args) {

    Humano erick = new Humano("Erick");
    erick.habla();

    System.out.println("---");

    Perro masha = new Perro("Masha");
    masha.habla();
  }
}
/**
 * Humano
 */

// Demuestra herencia al usar una super clase
public class Humano extends Mamifero {
  public Humano(String nombre) {
    String[] extremidades = { "2 piernas", "2 brazos" };

    this.numExtremidades = 4;
    this.extremidades = extremidades;
    this.nombre = nombre;
  }
}
/**
 * Perro
 */

// Demuestra herencia al usar una super clase
public class Perro extends Mamifero {
  public Perro(String nombre) {
    String[] extremidades = { "4 patas" };

    this.numExtremidades = 4;
    this.extremidades = extremidades;
    this.nombre = nombre;
  }

  // Demuestra polimorfismo al modifica el comportamiento de un método
  // y manteniendo compatibilidad con el mismo.
  public void habla() {
    System.out.println("Ruf! Ruf!");
    super.habla();
    System.out.println("Ruf! Ruf!");
  }
}
/**
 * Mamifero
 */
public class Mamifero {

  // Demuestra encapsulacion al mantener las propiedades protegidas del uso
  // directo por otras clases.
  protected String nombre;
  protected int numExtremidades;
  protected String[] extremidades;

  public void habla() {
    System.out.println("Hola, mi nombre es " + this.nombre);
    System.out.println("Tengo " + this.numExtremidades + " extremidades: " + String.join(",", this.extremidades));
  }
}

  1. https://en.wikipedia.org/wiki/Object-oriented_programming