Vistas de página en total

miércoles, 18 de mayo de 2011

ORQUESTA




LLAMADAS






CLASES ADSTRACTAS








POLOMORFISMO

El polimorfismo es un concepto de la programación orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma específica. En general nos sirve para programar objetos con características comunes y que todos estos compartan la misma superclase en una jerarquía de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programación.


Recuerde el ejemplo del ecosistema, en donde todos los objetos de las distintas especies heredaban de una superclase llamada Animal, que brindaba la información general de cualquier animal, independiente de su especie. Sin embargo, cada especie hace un uso particular de cada uno de los métodos u operaciones de la clase Animal. El método comer() no se ejecutará de la misma manera en un León() o en un Pavo(). Lo mismo ocurre para métodos moverse() en objetos de tipo Tiburón() o Gallina(), aunque todas las especies realicen estos métodos. A la sobrescritura o implementación específica de métodos es la clave del polimorfismo.


Para poner en práctica se hará un ejemplo bastante sencillo. Se hará una librería de clases que represente figuras tridimensionales y bidimensionales, y su respectiva jerarquía de clases. Las clases deben ser capaces de tener funcionamiento bastante básico, como obtener áreas, volúmenes y perímetros de la figura correspondiente.




La representación de la jerarquía sería como ésta:



Click a la imagen para verla más grande...




La superclase de dicha jerarquía podría ser muy parecida a ésta:


public abstract class figura {


protected String nombre;
protected int color;
protected int grosorBorde;


public String getNombre(){
return this.nombre;
}
public void setNombre(String n){
this.nombre=n;
}


public int getColor(){
return this.color;
}


public void setColor(int c){
this.color=c;
}


public int getGrosorBorde(){
return this.grosorBorde;
}


public void setGrosorBorde(int g){
this.grosorBorde=g;
}


public abstract void dibujar();
}


Las siguientes clases en el nivel de la jerarquía podrían quedar muy parecidas a éstas:


public abstract class figura2D extends figura {


public abstract int calcularArea();


public abstract int calcularPerimetro();
}


public abstract class figura3D extends figura {


public abstract int calcularVolumen();
}

CLASE ADSTRACTA

Hay ocasiones, cuando se desarrolla una jerarquía de clases en que algún comportamiento está presente en todas ellas pero se materializa de forma distinta para cada una. Por ejemplo, pensemos en una estructura de clases para manipular figuras geométricas. Podríamos pensar en tener una clase genérica, que podría llamarse FiguraGeometrica y una serie de clases que extienden a la anterior que podrían ser Circulo, Poligono, etc. Podría haber un método dibujar dado que sobre todas las figuras puede llevarse a cabo esta acción, pero las operaciones concretas para llevarla a cabo dependen del tipo de figura en concreto (de su clase). Por otra parte la acción dibujar no tiene sentido para la clase genérica FiguraGeometrica, porque esta clase representa una abstracción del conjunto de figuras posibles.
Para resolver esta problemática Java proporciona las clases y métodos abstractos. Un método abstracto es un método declarado en una clase para el cual esa clase no proporciona la implementación (el código). Una clase abstracta es una clase que tiene al menos un método abstracto. Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta. 

martes, 17 de mayo de 2011

INTERFACE EN JAVA

El concepto de Interface lleva un paso más adelante la idea de las clases abstractas. En Java una interface es una clase abstracta pura, es dcir una clase donde todos los métodos son abstractos (no se implementa ninguno). Permite al diseñador de clases establecer la forma de una clase (nombres de métodos, listas de argumentos y tipos de retorno, pero no bloques de código). Una interface puede también contener datos miembro, pero estos son siempre static y final. Una interface sirve para establecer un 'protocolo' entre clases. 
Para crear una interface, se utiliza la palabra clave interface en lugar de class. La interface puede definirse public o sin modificador de acceso, y tiene el mismo significado que para las clases. Todos los métodos que declara una interface son siempre public. 
Para indicar que una clase implementa los métodos de una interface se utiliza la palabra clave implements. El compilador se encargará de verificar que la clase efectivamente declare e implemente todos los métodos de la interface. Una clase puede implementar más de una interface.

jueves, 12 de mayo de 2011

HERENCIA MULTIPLE

hace referencia a una característica de los lenguajes de programación orientada a objetos en la que una clase puede heredar comportamientos y características de más de una superclase. Esto contrasta con la herencia simple, donde una clase sólo puede heredar de una superclase.
La herencia múltiple permite a una clase tomar funcionalidades de otras clases, como permitir a una clase llamada MusicoEstudiante heredar de una clase llamada Persona, una clase llamada Músico, y una clase llamada Trabajador. Esto puede ser abreviado como MusicoEstudiante : Persona, Músico, Trabajador.

jueves, 31 de marzo de 2011

EJERCICIO HERENCIA

Analizamos el ejercicio



creacion del main
Obtemos el Resultado

ELEMPLO DE OPERADOR THIS

class Perro{


private $nombre;
private $edad;
private $comida;


// constructor se ejecuta al momento de invocar la clase Perro.
public function __construct() {
$this->nombre = 'Cachupín';
echo 'Un nuevo perrito a venido al mundo ';
}




// métodos
public function SetComida($dato){
$this->comida = $dato;
}


public function DarNombre($dato){
$this->nombre = $dato;
echo 'A su amo, se le ha ocurrido darle el nombre de '.$dato.'';
}


public function Comer(){
echo $this->nombre.' está comiendo un rico plato de '.$this->comida;
}


}


$cachupin = new Perro();
$cachupin->DarNombre('Destructor');
$cachupin->Setcomida('Dog Show');
$cachupin->Comer();


si te fijas, "this" hace referencia a algún elemento de la clase. sea método/función propiedad/variable.

OPERADOR THIS

La palabra clave this se refiere al objeto de contexto (comúnmente conocido como el objeto actual [current object]). En general, en un método, this se refiere a la invocación del objeto.


this[.Nombrepropiedad] this es sólo de lectura




el this , es cuando en un mismo objeto quiere usar variables o metodos del mismo ej.

tiene el metodo sumar() ....

para utiliizarlo en la misma clase pone ,

sumar() ,,,,,,,o su equivalente this.sumar();

tambien le sirve cuando quiere pasar como atributo el objeto,ej.

Agregar(this) ;



El objeto de contexto puede ser considerado como un parámetro oculto que es pasado a una función. Existen 4 maneras en las cuales this puede ser pasado:
Como consecuencia de este ser "pasado" a las funciones, esto no es fija para una función. Eso significa que una función no tiene un "propietario" o "padre", incluso si se trata de un método. En otras palabras, un método no está vinculado al objeto de que se trata de un método de.

Para ilustrar el concepto de unión, considere lo siguiente:

Como era de esperar, estas salidas de "Toyota".

Esta inesperada salida "no es un coche "en lugar de "Toyota". Desde la barra () no es una llamada al método, el objeto de contexto no se pasa. esto, entonces por defecto en el objeto global, que es la ventana en un entorno de explorador. El objeto global, a su vez, también tiene una propiedad llamada marca con el valor "no es un coche". Si no tienen una propiedad denominada marca "indefinido"habría sido generan a su lugar.

Esto indica que la barra no está vinculado en modo alguno a foo. Por el contrario, la función a que se refiere el bar y foo.getBrand no está vinculada a su "objeto principal", foo. Un objeto puede tener una propiedad se refiere a la función, pero esa función no pertenece a ese objeto. La distinción entre los métodos y las funciones se realiza sólo cuando se les llama: llama al método pasar el "objeto principal" de este tipo, mientras que las llamadas a funciones pasar el objeto global de este tipo.

En concreto, esto en la función no es alimentada automáticamente por foo. En cambio este es suministrado por la llamada de función. Es decir, en el foo.getBrand expresión (), foo es pasado, ya que a la función a que se refiere por foo.getBrand. Todos los siguientes son equivalentes:

Esta falta de método de unión que se pretende. Permite que los métodos como "compartida" o "movido" de objeto a objeto. Continuando con el ejemplo anterior:




Ejemplo: El uso de este en un controlador de eventos
Supongamos que una función llamada validar valida la propiedad de un objeto de valor, teniendo en cuenta el objeto y los valores altos y bajos:



Supongamos que una función llamada validar valida la propiedad de un objeto de valor, teniendo en cuenta el objeto y los valores altos y bajos:
Usted puede llamar a validar en el controlador de cada elemento del formulario onChange caso, usando esto para pasar el elemento de formulario, como en el ejemplo siguiente:



HERENCIA

La Herencia es el mecanismo por el que se crean nuevos objetos definidos en términos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se puede crear la subclase Pato, que es una especialización de Ave.
    class Pato extends Ave {
        int numero_de_patas;
        }
La palabra clave extends se usa para generar una subclase (especialización) de un objeto. Una Pato es una subclase de Ave. Cualquier cosa que contenga la definición de Ave será copiada a la clase Pato, además, en Pato se pueden definir sus propios métodos y variables de instancia. Se dice que Pato deriva o hereda de Ave.
Además, se pueden sustituir los métodos proporcionados por la clase base. Utilizando nuestro anterior ejemplo de MiClase, aquí hay un ejemplo de una clase derivada sustituyendo a la función Suma_a_i():
    import MiClase;
    public class MiNuevaClase extends MiClase {
        public void Suma_a_i( int j ) {
            i = i + ( j/2 );
            }
        }
Ahora cuando se crea una instancia de MiNuevaClase, el valor de i también se inicializa a 10, pero la llamada al método Suma_a_i() produce un resultado diferente:
    MiNuevaClase mnc;
    mnc = new MiNuevaClase();
    mnc.Suma_a_i( 10 );
En Java no se puede hacer herencia múltiple. Por ejemplo, de la clase aparato con motor y de la clase animal no se puede derivar nada, sería como obtener el objeto toro mecánico a partir de una máquina motorizada (aparato con motor) y un toro (aminal). En realidad, lo que se pretende es copiar los métodos, es decir, pasar la funcionalidad del toro de verdad al toro mecánico, con lo cual no sería necesaria la herencia múltiple sino simplemente la compartición de funcionalidad que se encuentra implementada en Java a través de interfaces.