domingo, 6 de marzo de 2011

poo astraccion polimorfismo herencia

Abstracción: Lo primero que se hace al construir un instrumento electronico es abstraer la mayoria de sus funciones; observa, por ejemplo, tu monitor; tiene una cantidad increible de transistores, chips y elementos electronicos que por medio de complejos mapas y rutas de electrones hacen que funcione como tal; pero para hacerlo funcionar no necesitas saber eso; solo necesitas oprimir el boton de encendido y el mismo guiara la electricidad por todo el flujo del circuito, analizara cada onda que llegue por sus cables de conexión del computador transformandola de analoga a digital y haciando que cada uno de esos unos y ceros aparezca como diferentes tonos de luminosidad frente a tus ojos ... pero tu solo oprimiste el boton de encendido; solo llamaste a la función "encender" del objeto "Monitor" y el objeto lo hizo todo dentro de si mismo; eso es abstraer los metodos de un objeto.

Ahora usemos el ejemplo de un objeto Persona, y todas sus caracteristicas.

En una Persona ocurre lo mismo; nosotros tenemos, por ejemplo, la función de hablar, que es una abstracción de una serie de procesos electricos cerebrales, movimientos musculares y modulación del aire; entonces, si creara un objeto Persona y quisiera hacerla hablar, abstraeria todas las cosas que hacen que una persona hable en una sola función y llamaria a esa función cuando la necesite, pasandole por parametro, lo que quiero que hable; tambien podria hacer que esa persona dijera su nombre si asigno al objeto Persona la propiedad nombre y solicito su valor al pedirle que hable; todo esto en codigo seria similar a :

//Declaro una nueva variable de tipo Persona; y por medio de new la creo en memoria
var sandra:Persona = new Persona();
//Le asigno a su propiedad nombre el valor "Sandra"
sandra.nombre = "Sandra";
//Le pido que hable; pasandole por parametro a su función "hablar" el texto que dira
sandra.hablar("Mi nombre es " + sandra.nombre);
//Esto hara que nuestra Persona "sandra" diga "Mi nombre es Sandra"

En conclusión; abstracción es aislar todos los complejos metodos y propiedades de un objeto; tratando de hacerlos mas simples y modulares cada vez.

Encapsulamiento: Hay muchos datos que no tiene porque conocerlo aquel que este usando la clase Persona; ya que son inherentes al objeto y solo controlan su funcionamiento interno; por ejemplo, cuando alguien te ve puede saber inmediatamente si eres hombre o mujer (propiedad) o puede hablarte y obtener una respuesta procesada (metodo); tambien puede conocer el color de tu cabello y ojos. En cambio, jamas sabra que cantidad de energia exacta tienes o cuantas neuronas te quedan, ni siquiera preguntandote ya que ninguna de tus propiedades externas visibles o funciones de comunicación al publico te permiten saber esos datos.

Esto es la encapsulación u ocultación; hacer las variables que son innecesarias para el tratamiento del objeto pero necesarias para su funcionamiento privadas, asi como las funciones que no necesitan interacción del usuario o que solo pueden ser llamadas por otras funciones dentro del objeto (Como por ejemplo, palpitar)

La encapsulación es muy conveniente y nos permite (Si programamos bien) colocar en funcionamiento nuestro objeto en cualquier tipo de sistema, de una manera modular y escalable (algunas de las reglas de la ingenieria del software).

  • Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

Polimorfismo: El polimorfismo es una habilidad de tener varias formas; por ejemplo, la clase Jefe tiene acceso a los métodos de la clase Empleado.

􀂄 Un objeto tiene sólo un forma.

􀂄 Una variable tiene muchas formas, puede apuntar

a un objeto de diferentes maneras.

􀂄 En Java hay una clase que es la clase padre de

todas las demás: java.lang.Object.

􀂄 Un método de esta clase (por ejemplo: toString()

que convierte cualquier elemento de Java a

cadena

􀂄 de caracteres), puede ser utilizada por todos.

Herencia: La herencia es el mecanismo fundamental de relación entre clases en la orientación a objetos. Relaciona las clases de manera jerárquica; una clase padre o superclase sobre otras clases hijas o subclases.

programacion orientada a objetos java

public: Un miembro designado como public puede ser accedido desde cualquier código dentro del ámbito de un objeto instanciado a partir de la clase. Es la designación menos restrictiva.

private: Un miembro private solamente puede ser accedido por otros miembros de la propia clase; no puede ser accedido por miembros de una clase heredada. Es la designación más restrictiva de todas.

Interfase pública: Define los métodos que una clase debe de implementar, pero no define una implementación por su cuenta y cuando se declara publica puede ser accedida por otras clases.

Instancia: Podemos interpretar que una clase es el plano que describe como es un objeto de la clase, por tanto podemos entender que a partir de la clase podemos fabricar objetos. A ese objeto construido se le denomina instancia, y al proceso de construir un objeto se le llama instanciación.

get: Obtener valor de un atributo de forma directa también para "cargar un valor" (asignar un valor a una variable)

set: Tiene exactamente el mismo interfaz que Collection, y no hay ninguna funcionalidad extra, como en el caso de las Listas. Un Set es exactamente una Colección, pero tiene utilizada en un entorno determinado, que es ideal para el uso de la herencia o el polimorfismo. Un Set sólo permite que exista una instancia de cada objeto.

A continuación se muestran las diferentes implementaciones de Set, debiendo utilizarse HashSet en general, a no ser que se necesiten las características proporcionadas por alguna de las otras implementaciones.

Cada elemento que se añada a un Set debe ser único, ya que el otro caso no se añadirá porque el Set no permite almacenar elementos duplicados. Los elementos incorporados al Conjunto deben tener definido el método equals(), en aras de establecer comparaciones para eliminar duplicados. Set tiene el mismo interfaz que Collection, y no garantiza el orden en que se encuentren almacenados los objetos que contenga.

  1. ¿Cuál es la diferencia entre public y private?

En public Una variable/función es pública puede ser accedida desde fuera de la clase.y private Al contrario que las públicas, las variables/funciones privadas sólo pueden ser accedidas desde dentro de la misma clase.

  1. ¿Cuál es la diferencia entre un método accesor y un método modificador?

Que con método accesor solamente puedo visualizar la clase y con un método modificador puedo modificar una clase o método que han sido definidos como públicos. Por un tema de principios de la POO los atributos de los objetos deben ser siempre "privados" (concepto "encapsulación": no son accesibles desde fuera del objeto, solo el objeto tiene la potestad de usarlos directamente) y se deberán crear métodos públicos que sustituya una u otra operación, o ambas, cada vez que la situación lo amerite: un método "setter" para "cargar un valor" (asignar un valor a una variable) y/o un método "getter" para "retornar el valor" (solo devolver la información del atributo para quién la solicite).

  1. ¿Para qué sirve un método accesor y un método modificador?

Del buen uso de la visibilidad de los atributos en una clase depende el respetar o no el principio de ocultación, caracteristica de la POO, la cual nos dice que solamente los propios métodos internos del objeto pueden acceder a las propiedades del mismo.

Supongamos que tenemos una clase llamada Persona, con los atributos Nombre, Edad y Nacimiento, donde el Nacimiento es la fecha de nacimiento y la edad se obtiene a partir de esta. Dado que los atributos son privados no se tiene acceso a ellos desde fuera del objeto, lo cual representa un problema ya que necesitamos poder "ver" y modificar el atributo Nombre, modificar el Nacimiento y ver la Edad.

Para resolver el problema necesitamos implementar métodos accesores y modificadores los cuales nos van a permitir el acceso a los atributos de la clase, la idea consiste en implementar un método accesor por cada atributo que necesitemos "ver", y un método modificador por cada atributo que necesitemos modificar.

JAVA:

class Persona {
private
String Nombre;
private int Edad;
private
String Nacimiento;

void Persona (String Nombre, String Nacimiento) {
this.Nombre = Nombre;
this.Nacimiento = Nacimiento;
this.Edad = this.calcularEdad ();
}

private int calcularEdad () {
// Calcular Edad, devuelve int
}

//Metodos Accesores y Modificadores
String getNombre () {
return this.nombre;
}

void setNombre (String Nombre) {
this.Nombre = Nombre;
}

int getEdad () {
return this.Edad;
}

void set Nacimiento (String Nacimiento) {
this.Nacimiento = Nacimiento;
}

}

Debemos tomar en cuenta que la idea no es implementar métodos getter y setter a todos los atributos cuando no sea necesario, porque esto sería equivalente a dar visivilidad publica a nuestros atributos con lo cual no cometeremos el objetivo.

  1. ¿Cuál es el propósito de usar una variable private?

Un miembro private solamente puede ser accedido por otros miembros de la propia clase; no puede ser accedido por miembros de una clase heredada. Es la designación más restrictiva de todas. Construya una clase llamada “mascota”, en la cual deberá definir al menos dos propiedades y dos métodos.

  1. ¿Cómo se borran los datos almacenados en los objetos?

Muchos otros lenguajes orientados a objetos necesitan que se siga la pista de los objetos que se han creado y luego se destruyan cuando no se necesiten. Escribir código para manejar la memoria de esta es forma es aburrido y propenso a errores.

Java permite ahorrarse esto, permitiendo crear tantos objetos como se quiera (sólo limitados por los que el sistema pueda manejar) pero nunca tienen que ser destruidos. El entorno de ejecución Java borra los objetos cuando determina que no se van utilizar más. Este proceso es conocido como recolección de basura.

Un objeto es elegible para la recolección de basura cuando no existen más referencias a ese objeto. Las referencias que se mantienen en una variable desaparecen de forma natural cuando la variable sale de su ámbito. O cuando se borra explícitamente un objeto referencia mediante la selección de un valor cuyo tipo de dato es una referencia a null.

Programa Clase Mascota

class perro{

public String nombre,color,edad,tamaño;

public String saludo()

{

return "tu perro es asi verdad";

}

public String datos()

{

return nombre +" " +color +" " +edad +" " +tamaño;

}

}

import java.util.*;

public class dato {

public static void main(String[] args){

perro objeto1=new perro();

Scanner t=new Scanner (System.in);

System.out.println("nombre perro");

objeto1.nombre=t.next() ;

System.out.println("color de su perro");

objeto1.color=t.next() ;

System.out.println("edad de su perro");

objeto1.edad=t.next() ;

System.out.println("tamaño de su perro");

objeto1.tamaño.next() ;

System.out.println(objeto1.saludo());

System.out.println(objeto1.datos());

}}