POO (Programación Orientada a Objetos)
La POO (Programación Orientada a Objetos) trabaja con una colección de objetos que se crean, interaccionan entre sí y dejan de existir cuando ya no son útiles durante la ejecución de un programa. Las aplicaciones informáticas, con el paso del tiempo han ido adquiriendo más complejidad, la cual es más manejable cuando se descompone y se organiza en piezas pequeñas y simples: los objetos.
Un programa en Java usa clases y objetos. Las clases se pueden ver como una plantilla que representa un esquema simplificado. Una clase equivale a una representación abstracta de un conjunto de objetos que comparten los mismos atributos y comportamientos.
Un objeto es una instancia de una clase, que tiene una identidad propia y un estado. La identidad del objeto se define a través de su identificador, mientras que el estado se define por el valor de sus atributos. El comportamiento de un objeto viene determinado por el comportamiento de la clase a la que pertenece.
Clases
Una clase se define mediante el uso de la palabra reservada class seguido del nombre que vayamos a dar a la clase, con restricciones; el nombre de la clase debe empezar por una letra o carácter en mayúscula. En caso de usar nombres compuestos cada palabra, su primer carácter será en mayúscula. Por ejemplo imagina las clases Circulo, Persona, Coche …. O bien VagonTren.
Por ejemplo vamos a definir la clase Circulo, la cual se va a componer de tres atributos básicos que son: radio y coordenadas (x,y) tal y como se puede ver a continuación:
|
1 2 3 4 5 |
class Circulo { int x; int y; int radio; } |
Una vez que hemos definido la clase es cuando se pueden crear objetos a partir de la clase. A la creación de un objeto se le conoce con el nombre de instanciación. De ahí que anteriormente se dijo que un objeto es una instancia de una clase y el término instancia y objeto se usan indistintamente. Por ejemplo observa el siguiente código:
|
1 2 |
Circulo circulo1; Circulo mi_circulo; |
Pero para crear y asignar un espacio en memoria al objeto es necesario realizar la instanciación haciendo uso del operador new tal y como se ve a continuación:
|
1 2 3 4 |
circulo1 = new Circulo(); mi_circulo = new Circulo(); // O bien lo podemos hacer todo en una sola línea de la siguiente forma Circulo circulo2 = new Circulo() |
Objetos
Un objeto es un recurso dinámico que se crea y se almacena en memoria durante un tiempo determinado. A los objetos también se les conoce con el nombre de instancias de clase porque realmente esto es lo que son, una copia de la clase con unos valores determinados.
Una clase la podríamos definir como la plantilla a partir de la cual se va a generar el objeto.
Como ejemplo, podríamos definir una clase Cliente donde declararíamos todas las propiedades y métodos comunes a todos los clientes. Pues bien, un objeto o instancia de tipo cliente sería un cliente personalizado con su propio Nif, su nombre, su dirección, …etc.
La clase es el archivo .java para definir un cliente y los objetos son los recursos dinámicos que se generan en la memoria.
DECLARACION DE CLASES
Para declarar una clase nos debemos ajustar a la sintaxis de Java. Dicha sintaxis nos indica que el archivo en el cual declaramos la clase se debe seguir este orden.
- Declaración del paquete; Un paquete cumple una función similar a una carpeta en Windows. El paquete nos sirve para organizar nuestros recursos y además poder implementar niveles de acceso como veremos más adelante.
- Importaciones; En una clase podremos utilizar otras clases ya creadas. Estas pueden ser del propio API o también clases desarrolladas por terceras personas. Para poder acceder a otras clases es necesario importarlas previamente.
- Declaración de la clase; Aquí se definirán los recursos de la clase.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package unaClase; public class Persona { //Propiedades o atributos private String nombre; private String telf; private String nif; private int edad; //Constructor public Persona() { } //método public void muestraDatos() { System.out.println("nif: "+ nif + " nombre: " + nombre + " edad: " + edad); } } |
Como vemos en el ejemplo, una clase puede tener los siguientes recursos:
Propiedades; Las propiedades o también llamadas atributos o campos recogen las características de la clase. Según nuestro ejemplo una persona se representa por su nombre, teléfono nif y edad.
Constructores; Los constructores son un tipo de método especifico que se invocará cada vez que vayamos a crear un objeto o instancia de tipo persona.
Métodos; Son las acciones que podremos llevar a cabo sobre una persona. En este caso, imprimir en consola sus datos.
Declaración de propiedades
Una propiedad se entiende como una variable global a la cual se puede acceder desde cualquier otro recurso dentro de la misma clase y dependiendo del modo de acceso, también se podrá acceder a ella desde otras clases.
La sintaxis para declarar una propiedad es la siguiente:
acceso tipo nombreAtributo;
|
1 2 3 4 |
public int numero; private String nombre; protected double medida; long capital; |
El acceso puede ser:
- prívate.- son aquellos que solamente se pueden acceder desde la propia clase que los define.
- protected .- son aquellos que se pueden acceder desde la propia clase que los define y desde sus subclases.
- public – son aquellos que se pueden acceder libremente desde otras clases.
El tipo puede ser un tipo primitivo de Java o un identificar de una clase.
El nombre del atributo debe de cumplir las normas de los identificadores y se recomienda usar sustantivos que representen la información que almacenan.
Declaración de métodos
Utilizamos los métodos para introducir el código de nuestra aplicación. Podremos invocar a un método tantas veces como se quiera por lo cual nos permite una reutilización de código para aquellas tareas repetitivas.
Igual que ocurre con las propiedades, un método se puede invocar desde otro recurso declarado en la misma clase y dependiendo de su acceso, se podrá llamar desde otras clases.
La sintaxis para declarar un método es la siguiente:
1.- si el método no devuelve ningún dato:
acceso void nombreMetodo(){
}
Ejemplos:
|
1 2 3 4 5 6 7 8 9 10 11 |
public void mostrarDatos(){ // logica de negocio } private void abrirConexion(){ // logica de negocio } |
2.- si el método devuelve un dato:
acceso tipoDevuelto nombreMetodo(){
}
Ejemplos:
|
1 2 3 4 5 6 7 8 9 10 11 |
public int sumar(int num1, int num2){ return n1 + n2; } public String getNombre(){ return nombre; } |
Como observamos en los ejemplos, cuando un método devuelve un dato incluimos la clausula return. Esta instrucción lo que hace es devolver un dato a la sentencia que ha invocado al método.
En el ejemplo del método sumar, se han incluido dos argumentos en el método. Los argumentos son los valores que recibe el método para procesarlos. Los argumentos no son obligatorios, es decir, hay métodos que declaran argumentos y métodos que no. En este último caso los paréntesis siguen siendo obligatorios.
También destacamos que todo el cuerpo del método (lógica de negocio) va encerrado entre llaves.
Al igual que los atributos los métodos también tienen visibilidad.
Visibilidad de acceso
Para declarar el acceso a un miembro de la clase podemos utilizar los siguientes modos:

* Default es cuando no ponemos ponemos ningún identificador de acceso.
Como podemos observar están organizados de mayor a menor acceso. Expliquemos cada uno de ellos:
- public; un recurso definido como public se considera público por lo cual permite el acceso desde cualquier otro recurso ya sea declarado en la misma clase, en otra clase del mismo paquete, desde una subclase (herencia que se verá posteriormente) o incluso desde otras clases declaradas en otros paquetes.
- protected; un recurso definido como protected se considera protegido. Este modo permite el acceso desde cualquier otro recurso ya sea declarado en la misma clase, en otra clase del mismo paquete, desde una subclase. En este último caso es lo mismo si la subclase se encuentra en el mismo paquete o en otro.
- default; significa no establecer un modo de acceso. De esta forma solo se podrá invocar el recurso desde la misma clase o desde otra clase declarada en el mismo paquete.
- private; un recurso privado solo permite el acceso desde la misma clase donde ha sido declarado.