Programación Orientada a Objetos (POO)

Pilares de la Programación Orientada a Objetos:





1. Abstraccion: La abstracción es lo que nos permite tomar lo fundamental de la clase que heredaremos, tales cosas como lo pueden ser sus atributos y metodos. Se podría resumir como lo que nos permite tomar las caracteristicas necesarias para nuestro sistema.










2. Herencia: La herencia podría ser el pilar más fuerte de la programacion Orientada a Objetos para la reutilización de código, ya que esta consiste en utlizar atributos y metodos que se está heredando de una clase Padre a una clase Hija, asegurando así que se vuelva a utilizar el código base generado por una clase Padre.









3. Encapsulamiento: El encapsulamiento consiste en utlizar objetos de los cuales desconocemos su contenido o su código fuente, pero nos ayudan o nos simplifican una tarea.
No tomamos en cuenta su contenido y/o tratamos de averiguar como funciona, solamente tenemos conocimiento de su funcionamiento y de la ayuda que nos brindara.















4. Polimorfismo: El polimorfismo consiste en asignarle el mismo nombre a determinados procesos, pero con la cualidad de que cada uno de estos realizará diferentes acciones o bien sus parametros sean diferentes.










Clase:

¿Qué es una clase?
Podríamos definir una clase como un molde, el cual nos servira para crear objetos a partir de ese molde. Dado que pueden existir varios objetos del mismo tipo, con las mismas caracteristicas y funcionalidades, se crean clases, que como se menciono anteriormente representan los modelos ideales de un objeto. Luego cada uno de estos objetos sera personalizado, al recibir valores para cada uno de los atributos especificados.


Componentes de una clase:

Atributos: Los atributos son caracteristicas de nuestra clase, por ejemplo: podriamos tener una clase llamada perro y sus atributos podrian ser nombre,raza,color,sexo. Como podemos observar estos son adjetivos, ya que son caracteristicas del mismo. Algo muy importante a tener en cuenta es que cada uno de estos siempre inicia con minúscula.


Métodos: Ahora bien, los metodos son acciones que nuestra clase va a realizar. Siguiendo el ejemplo de la clase Perro algunos metodos podrían ser: ladrar(), correr(), orinarAfuera(). Como vemos los metodos tambien empiezan con un
a letra minúscula, pero lo que los diferencia es que estos son acciones, por lo tanto para definir un metodo utilizaremos verbos.


Parametros y Argumentos:


Parametros: Los parametros de una función son los valores que esta recibe por parte del código que la llama. Pueden ser tipos simples u objetos. En la declaración se escriben despúes del nombre entre paréntesis indicandose el tipo de dato de cada uno y su nombre.


Podemos ver que los parametros de la funcion dividir son dos; ambos de tipo entero, uno para dividendo y otro para divisor. Por lo tanto, a la hora de realizar la llamada a esta funcion se deben asignar valores de tipo entero para su correcto funcionamiento.


Argumentos: Se suele condunfir con el termino de Parametro  pero si bien se parecen, ambos son diferentes en su manera, un parametro es un tipo de valor que se requiere para el metodo. El argumento es el valor que se le asigna al metodo al momento de llamarlo; siguiendo el ejemplo del metodo dividir un argumento podría ser int dividir(45,50){ donde 45 y 50 son los argumentos.


Metodos con retorno y sin retorno:

Metodos con retorno: Los metodos pueden retornar valores (opcionalmente) para ello utlizamos la palabra return, el tipo del return se especifica dentro del metodo, así mismo la instrucción return termina el metodo inmediatamente y retorna el valor especificado al método invocante.



Metodos sin retorno: Ahora bien, los metodos sin retorno son aquellos que no retornan ningún valor. En el caso de estos metodos, utlizamos void(vacio) como tipo del metodo.




Métodos de acceso (getter y setter):

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



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. La sintaxis de llamada a un método de instancia es:

idReferencia.idMetodo(parametros); // Llamada tipica a un metodo de instancia

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



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



Constructor en Programación Orientada a Objetos:

En Java es un método especial dentro de una clase, que se llama automáticamente cada vez que se crea un objeto de esa clase. Posee el mismo nombre de la clase a la cual pertenece y no puede devolver ningún valor (ni siquiera se puede especificar la palabra reservada void). Por ejemplo, si añadiéramos a la clase SSuma un constructor, tendríamos que llamarlo también SSuma. Cuando en una clase no se escribe propiamente un constructor, Java asume uno por defecto.

Un constructor por defecto para la clase SSuma quedaría así:


   public SSuma() {




Sobrecarga de métodos:

Se llaman métodos sobrecargados a métodos con el mismo nombre en una clase. Para saber qué método se ejecuta cuando se le llama, se decide por el tipo de los parámetros que se le pasan. Haremos una clase de ejemplo con un método sobrecargado. El método se llamará imprimirLista(). Habrá tres métodos imprimirLista() y la forma de distinguirlos es por el tipo del parámetro que se le pasa: Integer, Double o Character.



Modificadores de acceso: 

un conjunto de palabras clave de Java que nos permiten controlar la visibilidad de los objetos (Clases), estado (Propiedades) y funcionalidades (Métodos) de una aplicación desde otras partes de la misma. Este control de acceso que normalmente se realiza en lenguajes orientados a objetos se llama encapsulamiento. En java se utlizarán cuatro principales:

Public: El método, propiedad o clase es accesible desde cualquier parte de la aplicación.

Private: El método o propiedad es accesible sólo desde la clase en la que se encuentra. En caso de una clase, sólo las “inner classes” pueden ser privadas, ya que no tiene sentido definir una clase de primer nivel privada si nadie pudiera luego acceder a ella.

Protected: El método es accesible por código que esté dentro del mismo paquete y subclases (aunque estas estén en otro paquete)

Sin especificar o Default: Cuando no especificamos ningún modificador de acceso se aplica el “por defecto”, este tiene la misma función que el anterior sin que entren en juego las subclases. Sólo permite el acceso a ese código desde dentro del mismo paquete. (También se conoce como package-private, que es más fácil de recordar)



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 métodos 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.

Clase abstracta:

 Una clase Abstracta es similar a una clase normal (como vimos anteriormente), la estructura es prácticamente igual, ya que poseen nombre, atributos y métodos pero para que una clase sea abstracta la condición es que al menos uno de sus métodos sea abstracto (se le agrega la palabra reservada abstract y no se especifica el cuerpo del método) su uso depende de la aplicación del concepto de Herencia y adicionaremos a la estructura básica de clase la palabra reservada abstract.



Interface en Java:

Un interfaz es una lista de acciones que puede llevar a cabo un determinado objeto pero sin definir como este las va a realizar, solamente es un prototipo de dicha función.
En las interfaces se especifica qué se debe hacer pero no su implementación. Serán 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 encapsulación de los protocolos de los métodos sin forzar al usuario a utilizar la herencia.
Java proporciona dos palabras reservadas para trabajar con interfaces: interface e implements.

Para declarar una interfaz se utiliza:


Array en Java: 


Java nos permite establecer un conjunto de variables del mismo tipo agrupadas bajo un mismo nombre, siendo distinguidas por un índice númerico.
Para definir un array(Arreglo) en Java, lo podemos hacer como cualquier variable, con la excepción de que tenemos que colocar un par de corchetes [] para indicar que es un array.

public int[] personas;




En este estámos defininiendo un array llamado personas.


Colecciones:

Una colección representa un grupo de objetos. Esto 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.

Colecciones List: Elementos en una secuencia particular que mantienen un orden y permite duplicados. La lista puede ser recorrida en ambas direcciones con un ListIterator. Hay 3 tipos de constructores:


  • ArrayList: Su ventaja es que el acceso a un elemento en particular es ínfimo. Su desventaja es que para eliminar un elemento, se ha de mover toda la lista para eliminar ese “hueco”.
  • Vector: Es igual que ArrayList, pero sincronizado. Es decir, que si usamos varios hilos, no tendremos de qué preocuparnos hasta cierto punto.
  • LinkedList: En esta, los elementos están conectados con el anterior y el posterior.
Colecciones Map: Un grupo de pares objeto clave-valor, que no permite duplicados en sus claves. Es quizás el más sencillo, y no utiliza la interfaz Collection. Los principales métodos son: put(), get(), remove().

  • HashMap: Se basa en una tabla hash, pero no es sincronizado.
  • HashTable: Es sincronizado, aunque que no permite null como clave.
  • LinkedHashMap: Extiende de HashMap y utiliza una lista doblemente enlazada para recorrerla en el orden en que se añadieron. Es ligeramente más rápida a la hora de acceder a los elementos que su superclase, pero más lenta a la hora de añadirlos.
  • TreeMap: Se basa en una implementación de árboles en el que ordena los valores según las claves. Es la clase más lenta.
Colecciones Collection: Un grupo de elementos individuales, frecuentemente con alguna regla aplicada a ellos.






No hay comentarios.:

Publicar un comentario