Programación Orientada a Objetos
Pilares de la POO:
La encapsulación:
Los métodos con valor de retorno se clasifican en dos tipos:
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
La programación orientada a objetos (POO, u OOP según sus siglas en inglés) es un paradigma de programación que viene a innovar la forma de obtener resultados. Los objetos manipulan los datos de entrada para la obtención de datos de salida específicos, donde cada objeto ofrece una funcionalidad especial.
Muchos de los objetos prediseñados de los lenguajes de programación actuales permiten la agrupación en bibliotecas o librerías, sin embargo, muchos de estos lenguajes permiten al usuario la creación de sus propias bibliotecas.
Está basada en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.
La abstracción:
Mucha gente considera que la abstracción en si no es más que una parte del proceso de la encapsulación, y por tanto no la tienen como pilar independiente de la POO.
La abstracción es la capacidad de obtener y aislar toda la información y cualidades de un objeto que no nos parezcan relevantes, para poder encapsularlos. Para ello separamos "mentalmente" los objetos y nos centramos en su comportamiento fundamental.
Gracias a ello, podemos representar las características esenciales de un objeto sin preocuparnos de las restantes.
Pongamos el ejemplo de un objeto llamado gato. El gato tiene propiedades o características (nombre, color, peso, precio, edad..) y métodos o comportamientos (andar, maullar, lamerse las pelotas...)
Gracias a la abstracción, otro objeto, por ejemplo el "objeto vendedor" puede manipular el "objeto gato" sin tener en cuenta algunas de sus propiedades y métodos, ya que solo le interesan algunas, como el precio.
Poniendo un ejemplo de videojuegos. Si creamos un juego de coches tipo Arcade, lo único que necesitamos abstraer de un coche real serán cosas como, la forma, el color y la velocidad, por ejemplo. Pero, si queremos crear un juego de coches tipo simulador, deberemos abstraer muchas más cosas, como el peso, la potencia, el tipo de tracción, tipo de combustible, tipo de ruedas, etc...
La encapsulación es la capacidad de ocultar los datos abstraídos, aislarlos o protegerlos de quién no desees que tenga acceso a ellos; otro objeto o función por ejemplo.
Cada objeto puede tener muchas cosas encapsuladas en su interior, propiedades, funciones o incluso otros objetos.
Muchas veces no se necesita entender el funcionamiento interno de un objeto, sino tan solo sus funcionalidades: para que sirve o qué puede hacer. Por tanto un objeto puede ser cambiado por otro siempre que cumpla con la misma función.
Veamos un ejemplo del mundo real. Imaginemos que tenemos un objeto: una tarjeta de sonido. No sabemos cuál es el funcionamiento interno de la misma, sus propiedades se podría decir que están encapsuladas dentro. Lo que si sabemos es que cumple con la función de proporcionar el sonido a nuestro ordenador. Podemos cambiar una tarjeta de sonido por otra, ya que cumplen la misma función, y no necesitamos saber nada más, a no ser que queramos trabajar para creative.
Para dejarlo aún más claro; el usuario no necesita saber cómo funciona internamente un coche, solo necesita saber que al pisar el acelerador (aplicar el método) el coche anda.
Herencia y reutilización:
La Herencia lo que nos dice es que puede crearse un objeto a partir de otro objeto ya existente. El nuevo objeto hereda todas las cualidades del objeto del que deriva y además puede añadir nuevas funcionalidades o modificar las ya existentes.
Imaginemos que tenemos un ordenador con sus planos y queremos fabricar otro ordenador. En vez de crear uno de cero, sería mucho más sencillo basarnos en el ordenador que ya tenemos y añadirle o modificarle ciertas funcionalidades como podrían ser: aumentar su capacidad, su velocidad de procesamiento, etc…
Este proceso además de a un objeto puede aplicarse a una clase. A la clase que se crea a partir de otra clase se le conoce como subclase o clase derivada.
Podemos crear una clase persona, y una clase mujer que hereda todas las propiedades de la clase persona y que añade otras nuevas como las tetas, y podemos crear varios objetos de la clase mujer, como podrían ser Ana o Bernarda...
Podemos crear una clase persona, y una clase mujer que hereda todas las propiedades de la clase persona y que añade otras nuevas como las tetas, y podemos crear varios objetos de la clase mujer, como podrían ser Ana o Bernarda...
Polimorfismo:
El polimorfismo es la capacidad para que varias clases u objetos derivados de otros, reaccionen de manera diferente ante los mismos métodos. El polimorfismo se puede aplicar tanto a objetos como a funciones, por lo que podemos hablar de objetos polimórficos y de funciones polimórficas.
Por ejemplo, cuando apretamos el acelerador de un coche no va a responder igual el que posee un motor diésel que el que tiene un motor de gasolina.
Clase:
En informática, una clase es una plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o conceptos, como los sustantivos en el lenguaje. Cada clase es un modelo que define un conjunto de variables -el estado, y métodos apropiados para operar con dichos datos -el comportamiento. Cada objeto creado a partir de la clase se denomina instancia de la clase.
Las clases de objetos son un pilar fundamental de la programación orientada a objetos. Permiten abstraer los datos y sus operaciones asociadas al modo de una caja negra. Los lenguajes de programación que soportan clases difieren sutilmente en su soporte para diversas características relacionadas con clases. La mayoría soportan diversas formas de herencia. Muchos lenguajes también soportan características para proporcionar encapsulación, como especificadores de acceso.
Una clase también puede tener una representación (metaobjeto) en tiempo de ejecución, que proporciona apoyo en tiempo de ejecución para la manipulación de los metadatos relacionados con la clase.
Componentes de una Clase:
Las clases se componen de elementos, llamados genéricamente «miembros», de varios tipos:
- campos de datos: almacenan el estado de la clase por medio de variables, estructuras de datos e incluso otras clases.
- métodos: subrutinas de manipulación de dichos datos.
- ciertos lenguajes permiten un tercer tipo de miembro: las «propiedades», a medio camino entre los campos y los métodos.
Utilizando un símil con el lenguaje, si las clases representan sustantivos, los campos de datos pueden ser sustantivos o adjetivos, y los métodos son los verbos.
La sintaxis típica de una clase es:
class Nombre {
// Variables miembro (habitualmente privadas)
miembro_1; //lista de miembros
miembro_2;
miembro_3;
// Funciones o métodos (habitualmente públicas)
funcion_miembro_1( ); // funciones miembro conocidas
funcion_miembro_2 ( ); // funciones como métodos
// Propiedades (habitualmente públicas)
propiedad_1;
propiedad_2;
propiedad_3;
propiedad_4;
}
Campos de datos[editar]
Los miembros o variables se utilizan para contener datos que reflejan el estado de la clase. Los datos pueden estar almacenados en variables, o estructuras más complejas, como structs, uniones e incluso otras clases.
Habitualmente, las variables miembro son privadas al objeto (siguiendo las directrices de diseño del Principio de ocultación) y su acceso se realiza mediante propiedades o métodos que realizan comprobaciones adicionales.
Métodos en las clases[editar]
Los métodos implementan la funcionalidad asociada al objeto. Los métodos son el equivalente a las funciones en programación estructurada. Se diferencian de ellos en que es posible acceder a las variables de la clase de forma implícita o incluida.
Cuando se desea realizar una acción sobre un objeto, se dice que se le manda un mensaje invocando a un método que realizará la acción.
Propiedades[editar]
Las propiedades son los atributos de la computadora. Debido a que suele ser común que las variables miembro sean privadas para controlar el acceso y mantener la coherencia, surge la necesidad de permitir consultar o modificar su valor mediante pares de métodos:
GetVariable
y SetVariable
.
Los lenguajes orientados a objetos más modernos (por ejemplo Java o C#) añaden la construcción de propiedad, que es una sintaxis simplificada para dichos métodos:
tipo Propiedad {
get {
}
set {
}
}
Parámetro y Argumento:
Los parámetros o argumentos son una forma de intercambiar información con el método. Pueden servir para introducir datos para ejecutar el método (entrada) o para obtener o modificar datos tras su ejecución (salida).
Los parámetros se declaran en la cabecera de la declaración de los métodos. Al declararse el parámetro, se indica el tipo de dato y el identificador correspondiente. Los parámetros o argumentos de un constructor o de un método pueden ser de cualquier tipo, ya sean tipos primitivos o referencias de objetos (en este caso debe indicarse el identificador de la clase correspondiente). Ejemplos de declaraciones de cabeceras de métodos:
// Sin parametros
public double devuelve()
{
return ...;
}
// Un parametro, x de tipo double
public void asigna(double x) {
...
}
// Dos parametros, a y b de tipo int
public int elMayor(int a, int b) {
...
}
// Un parametro, v, array real
public static double sumatorio (double [] v) {
...
}
// Un parámetro de la clase Fecha
public boolean caducado (Fecha fechaLimite) {
...
}
Metodos de Retorno:
Los métodos con valor de retorno son módulos de programa que pueden recibir datos de entrada por medio de variables locales (parámetros) y posteriormente retorna un resultado al punto donde es llamado. Este tipo de métodos se utiliza para operar cualquier tipo de proceso que produzca un resultado.
Los métodos con valor de retorno se clasifican en dos tipos:
- Métodos con valor de retorno sin parámetros.
- Métodos con valor de retorno con parámetros.
1. Métodos con valor de retorno sin parámetros
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
- valor: Es el valor que es retornado por el método.
- tipo: Es el tipo del valor de retorno.
Invocación (llamado):
variable = nombreMetodo();
Donde:
variable = nombreMetodo();
Donde:
- variable: Es la variable que recibe el valor retornado por el método.
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
Metodos sin Retorno:
Un método es una estructura del lenguaje Java que nos sirve para encapsular cierta funcionalidad, la cual podamos llamar desde diferentes sitios y así no tener que repetir el código.
Un método generalmente usa toda esa estructura solo exceptuando la declaración de si es dinámico u estático. La primera parte de creación de un método se refiere a el tipo de acceso que puede ser:
- protected, acceso protegido de datos
- private, acceso solo de modo interno de la clase
- public, acceso desde una instancia externa de la clase
La segunda parte se refiere a el uso del método Java, si es estático lo cual significa que el método seria accesible desde fuera de la clase sin necesidad de instanciar la clase.
- static, el acceso al método es estático.
El tipo de dato es dependiente de lo que se desea como resultado del método como puede ser por ejemplo void si nuestro método no tiene salida alguna, o un tipo de dato especifico como puede ser double o int si es una salida de tipo numérico.
El nombre de metodo de preferencia debe ser escrito en notacion camelCase por ejm: (la notación camel case detalla que se debe usar en los métodos con nombres compuestos siempre la primera letra de cada palabra en mayúscula)
Para la creación del método no en todos los casos es necesario argumentos pero si deseamos usar algún argumento, cada argumento deberá tener su tipo de dato y nombre de argumento.
public void miMetodo(int argumento1){ //funcionamiento debe ser escrito aqui.... return; }
Bueno ahora solo nos queda ver un ejemplo de cómo crear el método con Java. Para ello vamos a definir un método que nos sume dos números con Java. De esta forma, cada vez que queramos sumar dos números nos bastará con llamar a este método.
public static int sumarNumeros (int numero1, int numero2) { return numero1 + numero2; }
En este método podemos ver que el tipo de acceso es público, cabe detallar que este tipo de método también es de acceso estático por tanto no necesitamos instanciar un objeto de la clase a la cual pertenece este método. También tomando en cuenta el tipo de dato a devolver del método se puede decir que trabaja con entradas de tipo entero tanto como salidas de tipo entero tal como detalla su signatura.
Metodos de Acceso:
Los métodos get y set, son simples métodos que usamos en las clases para mostrar (get) o modificar (set) el valor de un atributo. El nombre del método siempre sera get o set y a continuación el nombre del atributo, su modificador siempre es public ya que queremos mostrar o modificar desde fuera la clase. Por ejemplo, getNombre o setNombre.
Esta es la sintaxis de cada uno:
public tipo_dato_atributo getAtributo (){
return atributo;
}
public void setAtributo (tipo_dato_atributo variable){
this.atributo = variable;
Tipos de métodos
MÉTODOS DE INSTANCIA
Las clases pueden incluir en su declaración muchos métodos o no declarar ninguno. Los métodos pueden clasificarse en métodos de instancia y métodos de clase.
Los métodos de instancia operan sobre las variables de instancia de los objetos pero también tienen acceso a las variables de clase. La sintaxis de llamada a un método de instancia es:
// Llamada tipica a un metodo de instancia idReferencia.idMetodo(parametros);
Todas las instancias de una clase comparten la misma implementación para un método de instancia. La instancia que hace la llamada al método es siempre un parámetro o argumento implícito. Dentro de un método de instancia, el identificador de una variable de instancia hace referencia al atributo de la instancia concreta que hace la llamada al método (suponiendo que el identificador del atributo no ha sido ocultado por el de un parámetro).
En el ejemplo anterior en la declaración de la clase
CuentaBancaria
, los métodos saldo
y transferencia
son métodos de instancia.public double saldo() { return this.saldo; } public void transferencia( CuentaBancaria origen ) { this.saldo += origen.saldo; origen.saldo = 0; }
Ejemplos de llamada a estos métodos dentro de
PruebaCuentaBancaria
:CuentaBancaria c1 = new CuentaBancaria(); CuentaBancaria c2 = new CuentaBancaria(20.0); c1.transferencia(c2); System.out.println("Cuenta con: " + c1.saldo() + " euros");
MÉTODOS DE CLASE
En principio, los métodos de clase no operan sobre las variables de instancia de los objetos. Los métodos de clasepueden trabajar con las variables de clase pero no pueden acceder a las variables de instancia declaradas dentro de la clase, a no ser que se crea una nueva instancia y se acceda a las variables de instancia a través del nuevo objeto. Los métodos de clase también pueden ser llamados precediendolos con el identificador de la clase, sin necesidad de utilizar el de una instancia.
IdClase.idMetodo(parametros); // Llamada tipica a un metodo de clase
La palabra
static
determina la declaración de un método de clase. Por defecto, si no se indica la palabra static
, el método declarado se considera un método de instancia.
En el ejemplo anterior en la declaración de la clase
CuentaBancaria
, el método incCuentas
es un método de clase.public static void incCuentas () { totalCuentas++; }
Un ejemplo de llamada a este método dentro de
PruebaCuentaBancaria
sería:CuentaBancaria.incCuentas();
Comentarios
Publicar un comentario