martes, 18 de octubre de 2011

sobrecarga de metodos

La sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferentes firmas y definiciones. En Java es posible definir dos o más métodos dentro de la misma clase que compartan el mismo nombre pero las declaraciones de sus parámetros deben ser diferentes. A esto es a lo que se conoce como Sobrecarga de Métodos.
La Sobrecarga es uno de los procedimientos mediante el cual Java implementa el polimorfismo(en programación orientada a objetos es la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación)

Un método sobrecargado se utiliza para reutilizar el nombre de un método pero con diferentes argumentos (opcionalmente un tipo diferente de retorno). Las reglas para sobrecargar un método son las siguientes:

Los métodos sobrecargados deben de cambiar la lista de argumento, Pueden cambiar el tipo de retorno, Pueden cambiar el modificador de acceso, Pueden declarar nuevas o más amplias excepciones.Un método puede ser sobrecargado en la misma clase o en una subclase.

Veamos un método que se desea sobrecargar:

public void cambiarTamano(int tamano, String nombre, float patron){ }


Los siguientes métodos son sobrecargas legales del método cambiarTamano():

public void cambiarTamano(int tamano, String nombre){}
public int cambiarTamano(int tamano, float patron){}
public void cambiarTamano(float patron, String nombre) throws IOException{}

Cómo invocar un método sobrecargado::

Lo que define qué método es el que se va a llamar son los argumentos que se envían al mismo durante la llamada. Si se invoca a un método con un String como argumento, se ejecutará el método que tome un String como argumento, si se manda a llamar al mismo método pero con un float como argumento, se ejecutará el método que tome un float como argumento y así sucesivamente. Si se invoca a un método con un argumento que no es definido en ninguna de las versiones sobrecargadas entonces el compilador arrojará un mensaje de error.

Ejemplo de una clase con un método sobrecargado:

public class Sobrecarga {
public void Numeros(int x, int y){
System.out.println("Método que recibe enteros.");
}
public void Numeros(double x, double y){
System.out.println("Método que recibe flotantes.");
}
public void Numeros(String cadena){
System.out.println("Método que recibe una cadena: "+ cadena);
}
public static void main (String... args){
Sobrecarga s = new Sobrecarga();
int a = 1;
int b = 2;
s.Numeros(a,b);
s.Numeros(3.2,5.7);
s.Numeros("Monillo007");
}
}

Al ejecutar el código anterior obtendremos lo siguiente:

Método que recibe enteros.
Método que recibe flotantes.
Método que recibe una cadena: Monillo007

miércoles, 5 de octubre de 2011

CONSTRUCTORES Y DESTRUCTORES:DECLARACION, USO Y SUS APLICACIONES

Constructores y destructores: declaración, uso y aplicaciones

Para crear un objeto se necesita reservar suficiente espacio en memoria e inicializar los valores de los campos que representan el estado del objeto. Este trabajo es realizado por un tipo especial de método denominado constructor.

Constructor

Un método constructor de una clase es un método especial que: tiene el mismo nombre que la clase y  no tiene tipo de retorno.  La sintaxis para la declaración de un método constructor es:

[atributos] [modificadores] <identificador> ( [parámetros] ) [inicializador]
{

// Cuerpo del constructor.

}

Donde: atributos (opcional) es información declarativa adicional, modificadores (opcional) se restringen a extern y a los modificadores de acceso, identificador es el nombre del método constructor (igual al nombre de la clase), parámetros (opcional) es la lista de parámetros pasados al constructor, inicializador (opcional). Con el inicializador, el constructor invoca previamente a otro constructor.

El inicializador puede ser uno de los siguientes: base([listaDeParámetros]) this([listaDeParámetros])

Cuerpo del constructor es el bloque de programa que contiene las instrucciones para inicializar la instancia de clase (objeto).

Destructor

La sintaxis para declarar un destructor es:

[Atributos] ~ <Identificador> ( )
{

// Cuerpo del destructor.

}

Una clase solamente puede tener un destructor. Los destructores no pueden heredarse o sobrecargarse, los destructores no pueden invocarse, sino que son invocados automáticamente, un destructor no acepta modificadores ni parámetros, por ejemplo, la siguiente es una declaración de un destructor para la clase Figura:

~ Figura()
{

// Instrucciones para limpiar.

}

METODOS: DECLARACION, MENSAJES, PASO DE PARAMETROS, RETORNO DE VALORES

Métodos: Declaración, mensajes, paso de parámetros, retorno de valores.

Los métodos o funciones miembro se definen dentro de la clase a la que pertenecen y constituyen la interfaz o forma de acceder a la estructura interna de los objetos es decir a los datos privados.

Los métodos definen cual son las operaciones que se pueden realizar con los atributos de los objetos de la clase. La ejecución de un programa orientado a objetos consiste, en recibir, interpretar y responder unos objetos a los mensajes que envían otros objetos. En P.O.O. un mensaje está asociado siempre con un método, de manera que cuando un objeto recibe un mensaje la respuesta a ese mensaje es ejecutar el método asociado

Declaración o cabecera:

Modo de acceso: Específica el tipo de acceso permitido indicando que usuarios de la clase podrán acceder a ese método, los métodos son la única forma de acceso a los atributos privados. Por defecto los métodos tienen protección paquete, es decir son accesibles desde cualquier clase que pertenezca al mismo paquete. Todas las clases de un mismo fichero .java pertenecen a un mismo paquete.

Public: Accesible desde cualquier otra clase.

Package: Accesible sólo desde el mismo paquete.

Protected: Se comporta como un método público para los métodos del mismo paquete o de las subclases y para el resto como un método privado.

Prívate: Sólo accesible a través de métodos de la propia clase.

retorno de valores: Un método puede devolver un valor a quien lo llama o no devolver nada. El valor devuelto por un método puede ser de un tipo primitivo de datos o una referencia, pero nunca  puede devolver más de un valor. El valor de retorno nunca puede ser un objeto de una superclase, sí de la misma clase o de una subclase. Si el método no devuelve nada el tipo devuelto por el método es el tipo void.

Paso de parámetros a una función o método.

Los parámetros de una función son variables locales que se inicializan en el momento de la llamada al método. Fuera de la función no se conocen y no pueden ser accedidas. Se crean al entrar en la función y se destruyen al salir de ella.
El paso de parámetros o argumentos a las funciones se puede hacer de dos formas.
Paso por valo , paso por  referencia 


REFERENCIA AL OBJETO ACTUAL

REFERENCIA AL OBJETO ACTUAL

Todo objeto puede hacer referencia a sí mismo, mediante la palabra clave This(lo que se conoce como una referencia this). En un método, la referencia this puede utilizarse en forma  implícita y explicita para hacer referencia a las variables de instancia y otros métodos del objeto en el cual se haya llamado.

Por ejemplo, el constructor de la clase Persona escrito anteriormente se puede reescribir así usando this:

            Persona (string Nombre, int Edad, string NIF)

            {

                        this.Nombre = Nombre;

                        this.Edad = Edad;

                        this.NIF = NIF;

            }

Es decir, dentro de un método con parámetros cuyos nombres coincidan con campos, se da preferencia a los parámetros y para hacer referencia a los campos hay que prefijarlos con el this tal y como se muestra en el ejemplo.

INSTANCIACION DE UNA CLASE


Instanciación de una clase.

Una clase es el tipo que tendrán nuestros objetos, también llamados instancias de esa clase, es decir, la clase es la forma que tendrán los objetos empleados por nuestra aplicación. Un ejemplo puede ser el plano de una casa, el plano sería nuestra clase, pero con ese mismo plano podremos construir diversas casas que serían los objetos. El plano en sí no es nada es solamente la especificación de lo que será una casa una vez construida.

Cuando creamos una instancia de la clase en ejecución tendremos las variables de instancia, una por cada atributo, y todas integradas dentro de la misma instancia. Todas las instancias de la misma clase tendrán los mismos atributos (nombre y tipo), pero cada una de ellas irá tomando distintos valores para ellos. Es decir, tendremos una copia de los atributos por cada objeto de una clase que creemos. Por ejemplo, tuCoche sería una instancia de la clase Coche y daremos a la variable de instancia velocidadMaxima el valor 180. Mientras que la instancia cocheDeNigell tiene su propia variable velocidadMaxima con el valor 300.

DECLARACION DE CLASE: ATRIBUTOS, METODOS, ENCAPSULAMIENTO

Declaración de clase: atributos, métodos, encapsulamiento

Declaración de clase es el cuerpo de la clase (el área entre los corchetes) contiene todo el código necesario durante el ciclo de vida de los objetos creados a partir de ella: constructores para inicializar objetos nuevos, declaraciones para los campos que proporcionan el estado de la clase y sus objetos y métodos que implementan el comportamiento de la clase y sus objetos, dicho de otra forma, la declaración de una clase informa de los elementos que la conforman.



Atributos: Los atributos describen el estado del objeto. Un atributo consta de dos partes, un nombre de atributo y un valor de atributo.



Métodos: Los métodos (operaciones o servicios) describen el comportamiento asociado a un objeto. La ejecución de un método puede conducir a cambiar el estado del objeto o dato local del objeto. Cada método tiene un nombre y un cuerpo que realiza la acción o comportamiento asociado con el nombre del método.

Encapsulamiento: El encapsulamiento o encapsulación es la propiedad que permite asegurar que el contenido de la información de un objeto esta oculta del mundo exterior: el objeto A no conoce lo que hace el objeto B, y viceversa. De esta manera combinamos los datos y los métodos que manejan dichos datos en un único objeto. Se denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.






LENGUAJE DE MODELADO UNIFICADO : DIAGRAMA DE CLASES

Lenguaje Unificado de Modelado

Es el lenguaje de modelado de sistemas de software más conocido y utilizado en la actualidad. Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.
El lenguaje de modelado es la notación (principalmente gráfica) que usan los métodos para expresar un diseño. El proceso indica los pasos que se deben seguir para llegar a un diseño.

Los diagramas de clases: se utilizan para mostrar la estructura estática del sistema modelado pueden contener clases, interfaces, paquetes, relaciones e incluso instancias, como objetos o enlaces. Los diagramas de clases son una potente herramienta de diseño ayudando a los desarrolladores a planificar y establecer la arquitectura y estructura del sistema y subsistema antes de escribir el ningún código esto permite asegurar que el sistema este bien diseñado desde el principio.
El diagrama de clase describe los tipos de objetos que hay en el sistema y las diversas clases de relaciones estáticas que existen entre ellos. Hay dos tipos principales de relaciones estáticas: Asociaciones (por ejemplo, un diente puede rentar diversas videocintas).Subtipos (una enfermera es un tipo de persona). Los diagramas de clase también muestran los atributos y operaciones de una clase y las restricciones a que se ven sujetos, según la forma en que se conecten los objetos.


ELEMENTOS DEL MODELO OBJETO

LA POO es un paradigma de programación utilizada para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas como herencia abstracción polimorfismo y encapsulamiento. Su uso se popularizo por el año de 1990.
Un objeto en POO representa alguna entidad de la vida real, es decir, alguno de los objetos que pertenecen al negocio con que estamos trabajando o al problema con el que nos estamos enfrentando, y con los que podemos interactuar.
DEFINICIONES
Clase: En la programación orientada a objetos, una clase es una construcción que se utiliza como un modelo (o plantilla) para crear objetos de ese tipo. El modelo describe el estado y el comportamiento que todos los objetos de la clase comparten. Un objeto de una determinada clase se denomina una instancia de la clase. La clase que contiene (y se utilizó para crear) esa instancia se puede considerar como del tipo de ese objeto, por ejemplo, una instancia del objeto de la clase "Persona" sería del tipo "Persona".
Más técnicamente, una clase es un conjunto coherente que consiste en un tipo particular de metadatos. Una clase tiene tanto una interfaz y una estructura. La interfaz describe cómo interactuar con la clase y sus instancias con métodos, mientras que la estructura describe cómo los datos se dividen en atributos dentro de una instancia.
Objetos: Un objeto en POO representa alguna entidad de la vida real, es decir, alguno de los objetos que pertenecen al negocio con que estamos trabajando o al problema con el que nos estamos enfrentando, y con los que podemos interactuar
A través del estudio de ellos se adquiere el conocimiento necesario para, mediante la abstracción y la generalización, agruparlos según sus características en conjuntos, estos conjuntos determinan las clases de objetos con las que estamos trabajando
El comportamiento de un objeto está directamente relacionado con su funcionalidad y determina las operaciones que este puede realizar o a las que puede responder ante mensajes enviados por otros objetos. La funcionalidad de un objeto está determinada, primariamente, por su responsabilidad. Una de las ventajas fundamentales de la POO es la reusabilidad del código; un objeto es más fácil de reutilizarse en tanto su responsabilidad sea mejor definida y más concreta.
La abstracción: consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan. En programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (Característica de caja negra).
La abstracción, permite que dispongamos de las características de un objeto que necesitemos. Si necesitamos el objeto Persona, podríamos poner nombre, edad, dirección, estado civil, etc.

Modularidad: Un programa es modular si se compone de módulos independientes y robustos. Esto permite la Reutilización y facilita la verificación y depuración de los mismos. En POO, los módulos están Directamente relacionados con los objetos. Los objetos son módulos naturales ya que corresponden A una imagen lógica de la realidad.
Encapsulamiento: Es el proceso de almacenar en un mismo compartimiento (una caja negra) los elementos de una Abstracción (toda la información relacionada con un objeto) que constituyen su estructura y su Comportamiento. Esta información permanece oculta tanto para los usuarios como para otros objetos Y puede ser accedida solo mediante la ejecución de los métodos adecuados.
Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Herencia: La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.
Polimorfismo: Literalmente significa "cualidad de tener más de una forma". En poo, se refiere al hecho que una Misma operación puede tener diferente comportamiento en diferentes objetos. En otras palabras, Diferentes objetos reaccionan al mismo mensaje de modo diferente.