Programación Orientada a Objetos

Pilares de la POO

Abstracción

Es el pila de la POO, que permite identificar las características y comportamientos de un objeto y con los cuales se construirá la clase(plantilla). Esto es decir que a través de este pilar o fundamento es posible reconocer los métodos y atributos de un objetos.

Resultado de imagen para abstraccion java poo

Encapsulamiento

Es la característica de la POO que permite el ocultamiento de la complejidad del código, pertenece a la parte privada de la clase y que no puede ser vista desde ningún otro programa.

Resultado de imagen para encapsulamiento java

Herencia 

Es el pilar mas fuerte que asegura la reutilizacion de código, ya que a partir de esta característica es posible reutilizar(heredar) las características y comportamientos de una clase superior llamada clase padre, a sus clases hijas, denominadas clases derivadas. Esto implica que una vez desarrollado el código de una clase base, su código puede ser reutilizado por las clases derivadas.



Polimorfismo

A través de esta característica es posible definir varios métodos o comportamientos de un objeto bajo un mismo nombre, de formal tal que es posible modificar los parámetros del método, o reescribir su funcionamiento, o incrementar mas funcionalidades a un método     



  





Clase

Las clases en java son plantillas para la creación de objetos, en lo que se conoce como programación orientada a objetos, la cual es una de los principales paradigmas de desarrollo de software en la actualidad.

Componentes de una clase

Atributos

Como mencione anteriormente una clase es una plantilla de la cual se puede crear objetos, una clase debe implementar sus características que se les conoce como propiedades o atributos, imaginemos que estamos diseñando una clase que va a permitir crear objetos de tipo vehículo, no todos los vehículos van a tener las mismas características, es posible que existan vehículos de colo rojo, azul, blanco  etc, este tipo de características las definimos como atributos o propiedades de una clase.

Puesto que los atributos de una clase guardan datos deben definir el tipo de dato que van a almacenar, por ejemplo int, boolean, long, byte, char, etc,o algun tipo de dato definido por el programador que puede ser un objeto.

La implementacion de los atributos de una clase se pueden ver como sigue:

1
2
3
4
class Vehiculo{
   String color;
   float motor;
}
 


Métodos

Una clase también implementa un comportamiento, siguiendo el ejemplo de la clase vehículo este puede tener varios comportamientos como por ejemplo: arrancar, frenar, parar, etc, el comportamiento de una clase se define con la creación de métodos, un método debe contener el tipo de retorno  + nombre del método (se recomienda que este siempre sea un verbo)+ apertura y cierre de paréntesis, un metodo tambien puede contener argumentos o parametros los mismos que deben ir dentro del parentesis, cada argumento tiene que tener definido su tipo y de haber varios deben ir separados por comas.


0
11
12
13
14
15
class Vehiculo{
   String color;
   float motor;
  
   public void arrancar(){
   }
   public int frenar(){
    return 1;
   }
  
   public void frenar(int param1, string param2){
    
   }
}

Parámetro y argumento

Los parámetros y argumentos son una forma de intercambiar información con el metodo. Pueden servir para introducir datos para ejecutar el metodo (entrada) o para obtener o modificar datos tras su ejecución(salida).


Métodos con retorno y sin retorno

Retorno

 Los métodos con valor de retorno son módulos de programas 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 

Sin retorno

Los métodos sin valor de retorno inician con void, el void especifica que el método no devuelve ningún valor.


Métodos de acceso(getter y setter)

Setters

Del ingles set que significa establecer, pues nos sirve para asignar un valor inicial a un atributo, pero de forma explicita, ademas el setter nunca retorna nada y solo nos permite dar acceso publico a ciertos atributos que deseemos que el usuario puede modificar.

Getter

Del ingles get que significa obtener, pues nos sirve para obtener(recuperar o acceder) el valor ya asignado a un atributo y utilizarlo para cierto método 

Tipos de Métodos

Métodos de instancia

los métodos de instancia operan sobre las variables de instancia de los objetos pero también tienen acceso a las variables de clase.



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 clase pueden 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 usar el de una instancia.




Constructor en POO

Es un método especial dentro de una clase, que se llama automáticamente cada vez que se crea un objeto de es clase.

Posee el mismo nombre de la clase a la cual pertenece y no puede devolver ningún valor (ni si quiere se puede especificar la palabra reservada void). 




Sobrecarga de métodos

En una clase la sobrecarga(overloading) es la creación de varios métodos con el mismo nombre pero con diferente lista de tipos de parámetros. Java utiliza el numero y tipo de parámetro para seleccionar cual definición de método ejecutar.

Java diferencia los metodos sobrecargados con base en el numero y tipo de argumento o parametro que tiene el metodo y no por el tipo que devuelve.







Modificadores de acceso

Los modificadores de acceso, como su nombre lo indica, determina desde que clases se puede acceder a un determinado elemento. En Java tenemos 4 tipos: public, private, protected y el tipo por defecto, que no tiene ninguna palabra clave asociada, pero se suele conocer como default o package-private.

El nivel de acceso public permite acceder al elemento desde cualquier clase, independientemente de que esta pertenezca o no al paquete en que se encuentra el elemento.

Private, por otro lado, es el modificador mas restrictivo y especifica que los elementos que lo utilizan solo pueden ser accedidos desde la clase en la que se encuentran. Este modificador solo puede utilizarse sobre los miembros de una clase o interfaces y clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendría sentido.

El modificador protected, por ultimo, indica que los elementos solo pueden ser accedidos desde su mismo paquete(como el acceso por defecto)y desde cualquier clase que extienda la clase en que se encuentra, independientemente si esta se encuentra en el mismo paquete o no. Este modificador, como private, no tiene sentido a nivel de clases o interfaces no internas. 



Modificadores de acceso
La misma claseOtra clase del mismo paqueteSubclase de otro paqueteOtra clase de otro paquete
publicXXXX
protectedXXX
defaultXX
privateX


Método Abstracto

Un método abstracto es un método declarado pero no implementado, es decir, es un método del que solo se escribe su nombre, parámetros y tipo devuelto pero no su código.

Los metodos abstractos se escriben sin llaves {} y con ; al final de la declaración por ejemplo:
public abstract area();

Un método se declara como abstracto porque en ese momento (en esa clase) no se conoce cómo va a ser su implementación.
Por ejemplo: A partir de una clase Polígono se pueden derivar las clases Rectángulo y Triángulo. Ambas clases derivadas usarán un método área. Podemos declararlo en Figura como abstracto y dejar que cada clase lo implemente según sus necesidades.
Al incluir el método abstracto en la clase base se obliga a que todas las clases derivadas lo sobrescriban con el mismo formato utilizado en la declaración.
Si una clase contiene un método abstracto se convierte en clase abstracta y debe ser declarada como tal.

La forma general de declarar un método abstracto en Java es:
[modificador] abstract tipoDevuelto nombreMetodo([parámetros]);  







Clase Abstracta

Las clases abstractas son aquellas clases base (superclases) de las que no se permite la creación de objetos. Para ello, se utiliza la palabra clave abstract.

En una clase abstracta es posible definir métodos abstractos, los cuales se caracterizan por el hecho de que no pueden ser implementados en la clase base de ellos, solo se escribe su signatura en la superclase, y su funcionalidad polimorfica-tiene que indicarse en las clases derivadas (subclases).

EJEMPLO Dadas la siguientes clases (FiguraCuadrado y Triangulo):
public abstract class Figura
{
    private String color;

    public Figura(String color)
    {
        this.color = color;
    }

    public abstract double calcularArea();

    public String getColor()
    {
        return color;
    } 
} 




Interface Java

Una interfaz en Java es una colección de métodos abstractos y propiedades constantes. En las interfaces se especificara que se debe hacer pero no su implementacion. Seran las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.
La principal diferencia entre interface y abstract es que un interface proporciona un mecanismo de encapsulasion de los protocolos de los métodos sin forzar al usuario a utilizar la herencia.




Array

Un array es una estructura de datos que nos permite almacenar una lista de datos de un mismo tipo. El tamaño de los arrays se declara en un primer momento y no puede cambiar en tiempo de ejecución como puede producirse en otros lenguajes. La declaración de un array en Java y su inicializacion se realiza de la siguiente manera:

tipo_dato nombre_array[]; 
nombre_array = new tipo_dato[tamanio];



Colecciones

Una colección representa un grupo de objetos. Estos objetos son conocidos como elementos cuando queremos trabajar con un conjunto de elementos, necesitamos un almacén donde poder guardarlos. En java se emplea la interfaz genérica Collection para este propósito. Gracias a esta interfaz, podemos almacenar cualquier tipo de objeto y podemos usar una serie de métodos comunes, como pueden ser añadir, eliminar, obtener el tamaño de la colección... partiendo de la interfaz genérica collection extiende otra serie de interfaces genéricas. Estas subinterfaces aportan distintas funcionalidades sobre la interfaz anterior.


  • List: La interfaz List define una sucesión de elementos. A diferencia de la interfaz Set, la interfaz List si admite elementos duplicados. A parte de los métodos heredados de Collection, añade métodos que permiten mejorar los siguientes puntos :


  • Acceso posicional a elementos: manipula elementos en función de su posición en la lista.
  • Búsqueda de elementos: busca un elemento concreto de la lista y devuelve su posición.
  • Iteración sobre elementos: mejora el Iterator por defecto.
  • Rango de operación: permite realizar ciertas operaciones sobre ragos de elementos dentro de la propia lista.


  • Map: La interfaz map asocia claves a valores. Esta interfaz no puede contener claves duplicada y; cada una de dichas claves, solo puede tener asociado un valor máximo. Dentro de la interfaz Map existen varios tipos de implementacion realizadas dentro de la plataforma Java. Vamos a analizar cada una de ellas 



  • HashMap: este implementación almacena las claves en una tabla hash. Es la implementación con mejor rendimiento de todas pero no garantiza ningún orden a la hora de realizar iteraciones. Esta implementación proporciona tiempos constantes en las operaciones básicas siempre y cuando la función hash disperse de forma correcta los elementos dentro de la tabla hash. Es importante definir el tamaño inicial de la tabla ya que este tamaño marcará el rendimiento de esta implementación.
    • TreeMap: esta implementación almacena las claves ordenándolas en función de sus valores. Es bastante más lento que HashMap. Las claves almacenadas deben implementar la interfaz Comparable. Esta implementación garantiza, siempre, un rendimiento de log(N)en las operaciones básicas, debido a la estructura de árbol empleada para almacenar los elementos.
    • LinkedHashMap: esta implementación almacena las claves en función del orden de inserción. Es, simplemente, un poco más costosa que HashMap



       




      



    Comentarios

    Entradas populares de este blog

    INTRODUCCIÓN A JAVA