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.
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;
}
()
{
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.
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.
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 ++;
}
}
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)
·
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