miércoles, 23 de agosto de 2017

Conceptos de la POO

CLASES

Las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos) de los futuros objetos.

Los objetos son instancias de una clase. Usando el símil “variable – tipo” de la programación estructurada, se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo (objeto)

Una clase es algo abstracto que define la "forma" del objeto, se podría hablar de la clase como el molde de los objetos.

En el mundo real existen objetos del mismo tipo, por ejemplo tu bicicleta es solo una mas de todas las bicicletas del mundo. Entonces diríamos que tu bicicleta es una instancia de la clase "Bicicleta". Todas las bicicletas tienen los atributos: color, cantidad de cambios, dueño y métodos: acelerar, frenar, pasar cambio, volver cambio.

Las fábricas de bicicletas utilizan moldes para producir sus productos en serie, de la misma forma en POO utilizaremos la clase bicicleta (molde) para producir sus instancias (objetos).

Los objetos son instancias de clases.

Ejemplo: Podríamos tener la clase Perro, una instancia de esta clase podría ser el objeto perro llamado "Chicho". La clase Perro especificaría que todos los perros tendrían un nombre, color de pelo, una altura. Mientras que la instancia "Chicho" contendrá valores específicos para cada uno de estos atributos.

Podemos definir a una clase como una plantilla que define variables y métodos comunes para todos los objetos de cierto tipo.

Veamos la creación de la clase Persona

1
2
3
4
5
6
7
8
9
public class Persona {
      public String nombre;
      public int edad;
      public void correr(){
              /* por implementar */
      }
}

y dentro del cuerpo del programa instanciamos una nueva Persona denominada Esteban:

1
2
3
4
5
6
7
8
9
10
11
public class Main {
    public static void main(String[] args) {
        Persona esteban = new Persona();
                // Ahora que esteban es persona, puede correr
                esteban.corre();
    }
}





Herencia

¿qué pasa si, por ejemplo, necesitamos extender el comportamiento de un objeto que 

posee las mismas características de comportamiento y estado que la Clase Persona y

además tiene otras características propias?

Como ya se dijo la reutilización de código es fundamental en este paradigma y en casos 

como estos se expresa como Herencia, cuya estructura jerárquica nos permite extender 

clases heredando todo (comportamientos y estados) desde una clase padre o Super Clase. 

las clases que hereden de una Super Clase se denominan Clases Hijas o Sub Clases.

Ejemplo: Imaginemos que una Persona ha sido expuesta a una extraña radiación y ahora

tiene super poderes, por lo que no deja de ser persona, pero ahora tiene nuevos

comportamientos y estados, por lo que diremos que la nueva clase Super Heroe hereda

de la clase Persona:

Veamos el siguiente código en Java.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SuperHeroe extends Persona{
    //Atributos:
    public String nombreDeFiccion;
    //Metodos:
    public void correrMuyRapido(){
        //TODO: implementar
    }
    public void volar(){
        //TODO: implementar
    }
}
Nota: La palabra clave extends nos indica que Super Heroe está 
heredando o extendiendo a la super clase Persona.
Ahora veamos como se comporta esta nueva clase dentro del cuerpo del 
programa principal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Main {
    public static void main(String[] args) {
        // Instanciar al nuevo SuperHeroe:
        SuperHeroe superPersona = new SuperHeroe();
        //Estas son propiedades de Persona:
        superPersona.nombre = "Carlos Kent";
        superPersona.edad = 37;
        //Esta es propiedad de SuperHeroe:
        superPersona.nombreDeFiccion = "Super Carlos";
        //Estos son metodos de SuperHeroe:
        superPersona.volar();
        superPersona.correrMuyRapido();
    }
}




Mensajes

Un objeto por si solo no tiene mucho significado. Ejemplo: el objeto 
"bicicleta" no tiene mucho sentido si no interactúa con un objeto "persona" que 
pedalee.
La interacción entre objetos se produce mediante mensajes. Los mensajes 
son llamados a métodos de un objeto en particular.
Podemos decir que el objeto persona envía el mensaje "girar a la izquierda"
al objeto bicicleta.
Los mensajes pueden contener parámetros. Por ejemplo teniendo un método en
la clase 
bicicleta llamado "Girar" que recibe como parámetro la dirección (derecha o
izquierda).

Polimorfismo

el polimorfismo se refiere a la propiedad por la que es posible enviar mensajes 
sintácticamente iguales a objetos de tipos distintos. El único requisito que deben 
cumplir los objetos que se utilizan de manera polimórfica es saber responder al 
mensaje que se les envía.

Resultado de imagen para polimorfismo

#include<iostream>
#include <math.h>
using namespace std;

class Figura {
  private:
  float base;
  float altura; 
  public:
 void captura();
 virtual unsigned float perimetro()=0;
 virtual unsigned float area()=0;
};

class Rectangulo: public Figura { 
 public:
  void imprime();
  unsigned float perimetro(){return 2*(base+altura);}
  unsigned float area(){return base*altura;}
};

class Triangulo: public Figura {
 public:
  void muestra();
  unsigned float perimetro(){return 2*sqrt(altura^2+(base/2)^2)+base;} //Usando pitágoras
  unsigned float area(){return (base*altura)/2;}
};

void Figura::captura()
{
 cout << "CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO ISÓSCELES Y UN RECTANGULO:" << endl;
 cout << "escribe la altura: ";
 cin >> altura;
 cout << "escribe la base: ";
 cin >> base;
 cout << "EL PERIMETRO ES: " << perimetro();
 cout << "EL AREA ES: " << area();
getchar();
return 0;
}


Encapsulamieto


Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. 
Al empaquetamiento de las variables de un objeto con la protección de sus métodos se
le llama encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder
 detalles de la puesta en práctica no importantes de otros objetos. Entonces, los detalles
 de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes 
del programa.

Resultado de imagen para encapsulamiento poo

Abstracción

Expresa las características esenciales de un objeto,

las cuales distinguen al objeto de los demás.
Imaginemos que queremos aplicar la abstraccion a las Aves.

El objeto seria el pájaro, y sus características, por ejemplo, serian:

Pico
Alas
Plumas
Patas
Las funcionalidades asociadas serian:

Volar, parar, etc.

No hay comentarios:

Publicar un comentario