martes, 26 de noviembre de 2013

CLASES OBJETOS Y METODOS





Objetos



Podemos definir objeto como el "encapsulamiento de un conjunto de operaciones (métodos) que pueden ser invocados externamente, y de un estado que recuerda el efecto de los servicios".



Un objeto además de un estado interno, presenta una interfaz para poder interactuar con el exterior. Es por esto por lo que se dice que en la programación orientada a objetos "se unen datos y procesos", y no como en su predecesora, la programación estructurada, en la que estaban separados en forma de variables y funciones.



Un objeto consta de:



  • Tiempo de vida: La duración de un objeto en un programa siempre está limitada en el tiempo. La mayoría de los objetos sólo existen durante una parte de la ejecución del programa. Los objetos son creados mediante un mecanismo denominado instanciación, y cuando dejan de existir se dice que son destruidos.
  • Estado: Todo objeto posee un estado, definido por sus atributos. Con él se definen las propiedades del objeto, y el estado en que se encuentra en un momento determinado de su existencia.
  • Comportamiento: Todo objeto ha de presentar una interfaz, definida por sus métodos, para que el resto de objetos que componen los programas puedan interactuar con él.



El equivalente de un objeto en el paradigma estructurado sería una variable. Así mismo la instanciación de objetos equivaldría a la declaración de variables, y el tiempo de vida de un objeto al ámbito de una variable.



Se puede decir que un objeto es todo aquello que pueda ser identificable dentro de una especificación de requerimientos o problema y tenga las siguiente características:



  • Tenga estados definibles (abierto, cerrado).
  • Posea comportamientos asociados (puede correr, saltar, volar, etc). Éstos son denominados métodos.
  • Son capaces de interactuar/comunicarse con otros objetos por medio de sus métodos



Una característica propia de este paradigma, es la transparencia entre la implementación a nivel de código y la funcionalidad que provee un método (no me interesa cómo lo haga, sólo que lo haga).




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)



Veamos la creación de la clase Persona







public class Persona {



      public String nombre;



      public int edad;







      public void correr(){



              /* por implementar */



      }







}



Que es una clase?. Una clase es una construcción usada como plano o patrón para crear los objetos de esa clase. Este plano describe el estado y comportamiento que comparten los objetos de esa clase. Un objeto es contenedor con el que podremos utilizar las propiedades y los métodos públicos de una clase y se pueden crear(instanciar) tantos objetos como necesitemos y todos tendrán los mismos métodos y propiedades.



Una clase puede tener propiedades (atributos) y métodos(funciones) que hacen interactuar a la clase consigo misma o con el mundo exterior



La clase es la base de la Programación Orientada a Objetos, por loque conviene entenderlo bien. Vamos a ver un ejemplo:



Tenemos una clase llamada Coche que representa coches en nuestro programa y tiene, por ejemplo, los atributos color y posición, y un método mover() que haría que que el coche se moviera, (por ejemplo si nuestro programa fuera un videojuego).



Las clases son abstracciones que representan a un conjunto de objetos con un comportamiento e interfaz común.



Podemos definir una clase como "un conjunto de cosas (físicas o abstractas) que tienen el mismo comportamiento y características... Es la implementación de un tipo de objeto (considerando los objetos como instancias de las clases)". [Piattini et al., 1996].



Una clase no es más que una plantilla para la creación de objetos. Cuando se crea un objeto (instanciación) se ha de especificar de qué clase es el objeto instanciado, para que el compilador comprenda las características del objeto.



Las clases presentan el estado de los objetos a los que representan mediante variables denominadas atributos. Cuando se instancia un objeto el compilador crea en la memoria dinámica un espacio para tantas variables como atributos tenga la clase a la que pertenece el objeto.



Los métodos son las funciones mediante las que las clases representan el comportamiento de los objetos. En dichos métodos se modifican los valores de los atributos del objeto, y representan las capacidades del objeto (en muchos textos se les denomina servicios).



Desde el punto de vista de la programación estructurada, una clase se asemejaría a un módulo, los atributos a las variables globales de dicho módulo, y los métodos a las funciones del módulo.



 Modelo de objetos



Existen una serie de principios fundamentales para comprender cómo se modeliza la realidad al crear un programa bajo el paradigma de la orientación a objetos. Estos principios son: la abstracción, el encapsulamiento, la modularidad, la jerarquía, el paso de mensajes y el poliforfismo.



a.) Principio de Abstracción



Mediante la abstracción la mente humana modeliza la realidad en forma de objetos. Para ello busca parecidos entre la realidad y la posible implementación de objetos del programa que simulen el funcionamiento de los objetos reales.



Los seres humanos no pensamos en las cosas como un conjunto de cosas menores; por ejemplo, no vemos un cuerpo humano como un conjunto de células. Los humanos entendemos la realidad como objetos con comportamientos bien definidos. No necesitamos conocer los detalles de porqué ni cómo funcionan las cosas; simplemente solicitamos determinadas acciones en espera de una respuesta; cuando una persona desea desplazarse, su cuerpo le responde comenzando a caminar.



Pero la abstracción humana se gestiona de una manera jerárquica, dividiendo sucesivamente sistemas complejos en conjuntos de subsistemas, para así entender más fácilmente la realidad. Esta es la forma de pensar que la orientación a objeto intenta cubrir.



b.) Principio de Encapsulamiento



El encapsulamiento permite a los objetos elegir qué información es publicada y qué información es ocultada al resto de los objetos. Para ello los objetos suelen presentar sus métodos como interfaces públicas y sus atributos como datos privados e inaccesibles desde otros objetos.



Para permitir que otros objetos consulten o modifiquen los atributos de los objetos, las clases suelen presentar métodos de acceso. De esta manera el acceso a los datos de los objetos es controlado por el programador, evitando efectos laterales no deseados.



Con el encapsulado de los datos se consigue que las personas que utilicen un objeto sólo tengan que comprender su interfaz, olvidándose de cómo está implementada, y en definitiva, reduciendo la complejidad de utilización.



c.) Principio de Modularidad



Mediante la modularidad, se propone al programador dividir su aplicación en varios módulos diferentes (ya sea en forma de clases, paquetes o bibliotecas), cada uno de ellos con un sentido propio.



Esta fragmentación disminuye el grado de dificultad del problema al que da respuesta el programa, pues se afronta el problema como un conjunto de problemas de menor dificultad, además de facilitar la comprensión del programa.



d.) Principio de Jerarquía



La mayoría de nosotros ve de manera natural nuestro mundo como objetos que se relacionan entre sí de una manera jerárquica. Por ejemplo, un perro es un mamífero, y los mamíferos son animales, y los animales seres vivos...



Del mismo modo, las distintas clases de un programa se organizan mediante la jerarquía. La representación de dicha organización da lugar a los denominados árboles de herencia:










Mediante la herencia una clase hija puede tomar determinadas propiedades de una clase padre. Así se simplifican los diseños y se evita la duplicación de código al no tener que volver a codificar métodos ya implementados.



Al acto de tomar propiedades de una clase padre se denomina heredar.



e.) Principio del Paso de Mensajes



Mediante el denominado paso de mensajes, un objeto puede solicitar de otro objeto que realice una acción determinada o que modifique su estado. El paso de mensajes se suele implementar como llamadas a los métodos de otros objetos.



Desde el punto de vista de la programación estructurada, esto correspondería con la llamada a funciones.



f.) Principio de Polimorfismo



Polimorfismo quiere decir "un objeto y muchas formas". Esta propiedad permite que un objeto presente diferentes comportamientos en función del contexto en que se encuentre. Por ejemplo un método puede presentar diferentes implementaciones en función de los argumentos que recibe, recibir diferentes números de parámetros para realizar una misma operación, y realizar diferentes acciones dependiendo del nivel de abstracción en que sea llamado.



 Relaciones entre objetos



Durante la ejecución de un programa, los diversos objetos que lo componen han de interactuar entre sí para lograr una serie de objetivos comunes.



Existen varios tipos de relaciones que pueden unir a los diferentes objetos, pero entre ellas destacan las relaciones de: asociación, todo/parte, y generalización/especialización.



a.) Relaciones de Asociación



Serían relaciones generales, en las que un objeto realiza llamadas a los servicios (métodos) de otro, interactuando de esta forma con él.



Representan las relaciones con menos riqueza semántica.



b.) Relaciones de Todo/Parte



Muchas veces una determinada entidad existe como conjunción de otras entidades, como un conglomerado de ellas. La orientación al objeto recoge este tipo de relaciones como dos conceptos; la agregación y la composición.



En este tipo de relaciones un objeto componente se integra en un objeto compuesto. La diferencia entre agregación y composición es que mientras que la composición se entiende que dura durante toda la vida del objeto componedor, en la agregación no tiene por qué ser así.



Esto se puede implementar como un objeto (objeto compuesto) que cuenta entre sus atributos con otro objeto distinto (objeto componente).



c.) Relaciones de Generalización/Especialización



A veces sucede que dos clases tiene muchas de sus partes en común, lo que normalmente se abstrae en la creación de una tercera clase (padre de las dos) que reúne todas sus características comunes.



El ejemplo más extendido de este tipo de relaciones es la herencia, propiedad por la que una clase (clase hija) recoge aquellos métodos y atributos que una segunda clase (clase padre) ha especificado como "heredables".



Este tipo de relaciones es característico de la programación orientada a objetos.



En realidad, la generalización y la especialización son diferentes perspectivas del mismo concepto, la generalización es una perspectiva ascendente (bottom-up), mientras que la especialización es una perspectiva descendente (top-down).



Un objeto se caracteriza por varios conceptos:



  • Atributos: estos son los datos que caracterizan al objeto. Son variables que almacenan datos relacionados al estado de un objeto.
  • Métodos (usualmente llamados funciones de miembro): Los métodos de un objeto caracterizan su comportamiento, es decir, son todas las acciones (denominadas operaciones) que el objeto puede realizar por sí mismo. Estas operaciones hacen posible que el objeto responda a las solicitudes externas (o que actúe sobre otros objetos). Además, las operaciones están estrechamente ligadas a los atributos, ya que sus acciones pueden depender de, o modificar, los valores de un atributo.
  • Identidad: El objeto tiene una identidad, que lo distingue de otros objetos, sin considerar su estado. Por lo general, esta identidad se crea mediante un identificador que deriva naturalmente de un problema (por ejemplo: un producto puede estar representado por un código, un automóvil, por un número de modelo, etc.).



·         Métodos: conjunto de instrucciones a las que se les asocia un nombre de modo que si se desea ejecutarlas, sólo basta o referenciarlas a través de dicho nombre en vez de tener que escribilas.



·         Dentro de estas instrucciones es posible acceder con total libertad a la información almacenada en los campos, pertenecientes a la clase dentro de la que el método se ha definido. Por lo que los métodos premiten manipular los datos almacenados en los objetos.



·         Sintaxis:
()
{
instrucciones;
}



·         Tipo devuelto: Todo método puede devolver un objeto como resultado de la ejecución de las insrucciones que lo froma, aqui de indica el tipo del dato al que pertenece este objeto.
Si no devuelve nada se indica “void” y si devuleve algo es obligatorio finalizar la ejecución de sus instrucciones con “return ” que indica el objeto a devolverse.



·         Parámetro: opcionalmente todo método puede recibir en cada llamada una lista de objetos a los que podrá acceder durante la ejecucion de sus instrucciones. Aqui se indica cuáles son lo stipos de datos de estos objetos y cuál es el nombre ocn el que harán referencia las instreucciones de método a cada uno de ellos.
Aún que l osobjetos que puede recibir el método pueden ser diferentes, cada vez que se solicite su ejecución simpre han de ser los mismos tipos y han de seguir el orden establecido en parámetros.



·         ejmplo:
class persona
{
string nombre;
int edad;
string RFC;
void cumpleaños ()
{
edad ++;
}
}



·         Sintaxis para llamar a los métodos de un objeto:
.(parámetro)



·         Parámetro: valores que se desean dar a los parámtros del método al hacer la llamada. Si el método no toma parámtros se deja vacío.



·         ejemplo: llamda al método cumpleaños de un objeto persona llamado p



·         p.cumpleaños();



·         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.



·         Para que se pueda hacer una llamada a un método éste tiene que estar definido:











[modificadores] tipo nombreMétodo ([ Tipo1 Parámetro1, Tipo2 Parámetro2, ...])  //Declaración o cabecera del método



   Definición de variables locales;   //Sólo accesibles desde la función

    Sentencias;                                                                                                                                Cuerpo del método.

    [return [(] expresión [)]];  // Puede  no ser la última y puede aparecer más de una vez en la función.

}






Declaración o cabecera:



·         Modo de acceso: Especifica 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.



o    public: Accesible desde cualquier otra clase.



o    package: Accesible sólo desde el mismo paquete.



o    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.



o    private: Sólo accesible a través de métodos de la propia clase.



·         Tipo del valor de retorno: 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.



·         Nombre: Por convenio, los nombres de los métodos comienzan con minúscula. Si el nombre del método es un nombre compuesto cada nueva palabra empieza con mayúsculas. Los nombres de los métodos suelen ser verbos.



Ejemplo:    calcularPerimetro                     pintar               finalizar



·         Posible lista de parámetros, la lista de parámetros formales es opcional, la función podría no tenerlos, en caso de que los haya se trata de variables locales (sólo accesibles y visibles desde el propio método) separadas por comas de las que se debe de especificar el tipo y nombre de cada una, se inicializan en la llamada recibiendo los valores especificados por los argumentos de la llamada. Aunque la función no lleve parámetros hay que poner los paréntesis. 



Cuerpo del método:



·         Definición de variables locales. Dentro de los métodos se pueden definir variables que sólo son accesibles dentro del método en donde se han definido. Este tipo de variables no se inicializan por defecto, y, aunque no se inicialicen en el momento de su definición se deben de inicializar antes de utilizarlas pues sino el compilador detecta un error.



·         Instrucciones necesarias para realizar determinada tarea.



·         La instrucción return devuelve el control de la ejecución al método que hizo la llamada. Si el método no devuelve nada y se elimina la sentencia return la función termina con la llave final o llave de cierre de la función, en este caso el tipo devuelto por el método es el tipo void. Si el método retorna un valor, la función no puede ser del tipo void y la sentencia return además de producir la salida de la función  especifica el valor de retorno al método que hizo la llamada. En una función puede haber más de una sentencia return pero sólo se ejecuta una.



·         Llamada a un método



·         Para que un método se ejecute hay que llamarlo. La llamada o invocación a un método provoca la ejecución de las instrucciones que lo componen, una vez se han ejecutado el control de la ejecución vuelve a quien hizo la llamada.



·         La llamada al método consta de:



·         -         Nombre del método.



·         -         Posible lista de argumentos, llamados también parámetros actuales, entre paréntesis y separados por comas.



·         Si un método no está definido como static la llamada o invocación al método hay que hacerla a través de un objeto que pertenezca a la clase que define el método y se dice que se envía un mensaje al objeto.







nombreObjeto.nombreMétodo([lista de argumentos])






·         El método se aplica al objeto de la clase a través del operador punto (.)



·         En este caso el objeto es siempre el argumento implícito del objeto. Los métodos pueden tener además argumentos explícitos que son los que van entre paréntesis a continuación del nombre del método.



·         Cuando se accede al método de un objeto se interpreta que el objeto ha recibido un mensaje y el objeto responde al mensaje ejecutando el método. Los mensajes que puede recibir un objeto se corresponden con el nombre de los métodos de su clase.



·         Si el método devuelve un valor, la llamada a la función debe de formar parte de una expresión que recoja el valor retornado por la función.



·         Métodos de clase o métodos static.



·         Son métodos que no tienen como finalidad actuar sobre los atributos privados de los objetos. Se trata de un bloque de sentencias que se agrupan bajo un mismo nombre por tener alguna relación lógica que las encamina a realizar una tarea específica. 



·         Se aplican en general donde se necesiten, al no actuar sobre objetos, no pueden acceder a un miembro no static, los objetos no son el argumento implícito en la llamada, (no actúan sobre objetos concretos a través del operador punto (.), pero pueden recibir objetos de su clase como argumentos explícitos). Un miembro static si puede ser accedido a través de métodos no static.



·         IMPORTANTE



·         -         Los métodos static no pueden acceder a variables ni llamar a métodos no static.



·         -         Los métodos y variables static si pueden ser accedidos o llamados desde  miembros no static.



·         Los métodos estáticos se crean anteponiendo al nombre del método la palabra static. Si se define un método como estático es posible llamarlo sin crear un objeto. Como ocurre con los campos, para invocar un método estático hay dos posibilidades:



·         •   Invocarlo directamente a través del nombre de la clase a la que pertenece.



·         •   Invocarlo a través de un objeto de la clase previamente creado.



·         Pero en la llamada se suele utilizar el nombre de la clase en lugar del nombre de un objeto de la clase.



·         Esta es la razón por la que el método main es static, para que pueda ser invocado aunque no exista un objeto de la clase



·         Los métodos y variables de clase es lo más parecido que tiene Java a las funciones y variables globales de C/C++.



·         El método main



·         Toda aplicación Java ha de tener un método main y sólo uno, es el punto de entrada y salida de la aplicación, es public, static y no devuelve nada. Generalmente en una clase se definirá más de un método. Cuando tras compilar la clase se ejecuta, Java busca el método llamado main y comienza ejecutando el programa desde él. Si no existe el método main se produce un error.



·         Cuando una clase contiene varios métodos, el método main suele ser el último en describirse



·         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 valor



·         -         Paso por  referencia 



·         Paso por valor



·         Los parámetros de la función reciben una copia del valor de los argumentos de la llamada.



·         Las modificaciones que se hagan sobre los parámetros formales no afectan al valor de los parámetros actuales.



·         Es el único modo de pasar las variables de los tipos básicos o primitivos.



·         Paso por dirección o referencia



·         Los parámetros formales reciben una copia de la referencia a un objeto. Los parámetros formales serán por tanto de  tipo referenciado.



·         Es la forma de pasar los objetos a las funciones y la única forma de poder modificar dentro de un método una variable de tipo primitivo es incluyéndola como variable miembro de una clase y pasar como argumento una referencia a un objeto de dicha clase.



·         El método actua directamente sobre el objeto, si modifica sus datos una vez termine la ejecución del método los objetos quedan modificados.  



·         Con este paso de parámetros se permite, de una forma implícita, que una función devuelva más de un valor a la función que la llama.




BIBLIOGRAFIA




No hay comentarios:

Publicar un comentario