PROGRAMACION ORIENTADA A OBJETOS



1. PILARES DE LA POO


Resultado de imagen para que es poo en programacion
La Programación Orientada a Objetos es un paradigma de programción que viene a innovar la forma de obtener resultados.  Los objetos manipulan los datos de entrada para la obtencion de datos de salida especificos, donde cada objeto ofrece una funcionalidad especial.

Muchos de los objetos prediseñados de los lenguajes de programación actuales nos permiten la agrupación en biblioteca o librerías, sin embargo, muchos de estos lenguajes permiten al usuario la creacion de sus propias bibliotecas. 


Las Caracteristicas de la Programación Orientada a Objetos son los siguientes:

  • Abstracción: este denota las caracteristcias esenciales de un objeto, donde se caputran sus comportamientos. Cada objeto en el sistema sirve como modelo. La abstracción es una pieza clave en el proceso de analisis y diseño de un objeto ya que por ello podemos llegar a crear un conjunto de clases que nos permitiran modelar el probelma que se quiere solucionar.
  • Encapsulamiento: este reune todos los elementos que pueden considerarse pertenecientes a una misma entidad al mismo nivel de abstracción. Esto nos permitira aumentar los componentes del sistema.
  • Herencia: es una propiedad que permite que los objetos sean creados a partir de otros ya existentes obteniendo caracteristicas ( metodos, atributos ) similares a los que ya existen.
  • Polimorfismo: este nos permite definir varios metodos o comportamientos de un objeto bajo el mismo nombre, de forma que nos permite modificar parametros del metodo, o reescribir su funcionamiento o incrementar su funcionalidad.

2. QUE ES UNA CLASE


Una clase es una plantilla para la creacion de objetos de datos. Las clases se utilizan para representar entidades o conceptos como los sustantivos en el lenguaje.

Tipos de Clases.

  • Class Public: son de las mas utlizadas y accesibles desde cualquier otra clase en la misma libreria.
  • Class Abstrac: estas son aquellas que tiene por lo menos un metodo abstracto. Estas no implementan metodos, sino que dan bases para que sean implementadas en la herencia.
  • Class Final: esta termina con la cadena herencia. Utiles para seguridad y eficiencia de un programa ya que no permiten crear mas sub-divisiones por debajo de esta clase.
  • Class Synchronizable: esta especifica metodos sincronizados evitando problemas con los thread ( hilo de ejecución ), de forma que estos no pueden empezar un metodo sino ha acabado.

3. COMPONENTES DE UNA CLASE


  • Atributos: Los atributos son las caracteristicas individuales que diferencian un objeto de otro y determinan su apariencia, estado u otras cualidades. Los atributos se guardan en las variables denominadas instancias.
  •  Metodo contienen el codigo que manipula el estado del objeto.  Ademas constituyen el mecanismo utilizado para implementar los mensajes entre objetos. Quiere decir cuando un objeto se comunica con otro por un mensaje lo hace por medio de la invocacion al metodo correspondiente al objeto.

Resultado de imagen para clase en programacion



4. QUE ES UN PARAMETRO Y UN ARGUMENTO



  • Argumento: es una variable que se utiliza para recibir valores de entrada en una rutina, subrutina, o metodo. A diferencia de la definición de parámetro, argumentos no tienen nombres. Cada argumento es una expresión, que puede contener cero o más variables, constantes y literales. El tipo de datos de la expresión evaluada normalmente debe coincidir con el tipo de datos definido para el parámetro correspondiente, y en cualquier caso, debe poder convertirse al tipo de parámetro.
Resultado de imagen para argumento en programacion


  • Parametro: representa un valor que el procedimiento espera que se pase al llamarla. La declaracion del procedimiento define sus parametros. Un  parametro influye en el comportamiento o el resultado de la ejecucion. Son muy utilizados en la programacion.
Resultado de imagen para parametros en programacion




5. METODOS CON RETORNO Y SIN RETORNO


Declaracion y Uso de Metodos

Un método es un trozo de código que puede ser llamado o invocado por el programa principal o por otro método para realizar alguna tarea específica. El término método en Java es equivalente al de subprograma, rutina, subrutina, procedimiento o función en otros lenguajes de programación. El método es llamado por su nombre o identificador seguido por una secuencia de parámetros o argumentos (datos utilizados por el propio método para sus cálculos) entre paréntesis. 

Return y Void

En algunas ocasiones, no es necesario que el método estático tenga que devolver un valor al finalizar su ejecución. En este caso, el tipo de dato que debe indicar en la cabecera de declaración del método es el tipo void y la sentencia return no viene seguida de ninguna expresión.


6. METODOS DE ACCESO ( GETTER AND SETTER )


Los Setters & Getters son métodos de acceso lo que indica que son siempre declarados públicos, y nos sirven para dos cosas:

Setters: Del Inglés Set, que significa establecer, pues nos sirve para asignar un valor inicial a un atributo, pero de forma explícita, además el Setter nunca retorna nada (Siempre es void), y solo nos permite dar acceso público a ciertos atributos que deseemos el usuario pueda modificar.

Getters: Del Inglés 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.

Resultado de imagen para getter y setter java



7. TIPOS DE METODOS


Metodo de Instancia

Las clases pueden incluir en su declaracion muchos metodos o no declarar ninguno. Los metodos pueden clasificarse en metodos de instancia y metodos 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: 

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

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 saldo; 
} public void transferencia( CuentaBancaria origen ) { 
          saldo += origen.saldo; origen.saldo=0; 

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

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++; 


8. CONSTRUCTOR EN POO


En programación orientada a objetos (POO), un constructor es una subrutina cuya misión es inicializar un objeto de una clase. En el constructor se asignan los valores iniciales del nuevo objeto.
Se utiliza para crear tablas de clases virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos. Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.

Constructor por defecto

Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a cero, los alfanuméricos a nuloPeq, y las referencias a objetos a null).
Resultado de imagen para CONSTRUCTOR EN POO


9. SOBRECARGA DE METODOS


Sobrecarga es la capacidad de un lenguaje de programación, que permite nombrar con el mismo identificador diferentes variables u operaciones. En programación orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos o más funciones con el mismo nombre pero funcionalidad diferente. 
Resultado de imagen para sobrecarga de metodosEs decir, dos o más funciones con el mismo nombre realizan acciones diferentes. El compilador usará una u otra dependiendo de los parámetros usados. A esto se llama también sobrecarga de funciones.
También existe la sobrecarga de operadores que al igual que con la sobrecarga de funciones se le da más de una implementación a un operador.

El mismo método dentro de una clase permite hacer cosas distintas en función de los parámetros. Java no permite al programador implementar sus propios operadores sobrecargados, pero sí utilizar los predefinidos como el +. C++, por el contrario si permite hacerlo.

10. MODIFICARDORES DE ACCESO


  • Private: Cuando un método o atributo (variable) es declarada como private, su uso queda restringido al interior de la misma clase, no siendo visible para el resto. Una clase no puede ser Private, sólo atributos y métodos.
  • (default): Si no se le asigna ningún modificador al elemento (variable, método y clase) Java asigna uno denominado "por defecto" el cual permite la visibilidad de los elementos(variables, métodos y clases) en clases que se encuentren en el mismo paquete(posteriormente explicaremos los paquetes)
  • Protected: Un método o atributo definido como protected es visible para las clases que se encuentren en el mismo paquete y para cualquier subclase de esta aunque este en otro paquete. Este modificador es utilizado normalmente para Herencias, así que lo estudiaremos más a fondo cuando lleguemos a las Herencias.
  • Public: El modificador public ofrece la máxima visibilidad, una variable, método o clase con modificador public será visible desde cualquier clase, aunque estén en paquetes distintos.


11. METODO ABSTRACTO


Un método abstracto es un método declarado en una clase para el cual esa clase no proporciona la implementación (el código). Una clase abstracta es una clase que tiene al menos un método abstracto. Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta. 

La clase abstracta se declara simplemente con el modificador abstract en su declaración. Los métodos abstractos se declaran también con el mismo modificador, declarando el método pero sin implementarlo (sin el bloque de código encerrado entre {}). La clase derivada se declara e implementa de forma normal, como cualquier otra. Sin embargo si no declara e implementa los métodos abstractos de la clase base (en el ejemplo el método dibujar) el compilador genera un error indicando que no se han implementado todos los métodos abstractos y que, o bien, se implementan, o bien se declara la clase abstracta. 

12. CLASE ABSTRACTA


 Estas clases se caracterizan por tener algunos de sus métodos declarados como abstractos, pero ¿qué es un método abstracto?. Un método abstracto es aquel que está definido, pero no tiene cuerpo, es decir, le declaramos el nombre, los parámetros y el tipo de devolución pero no le declaramos lo que va entre llaves "{}", es más, no le ponemos llaves.


13. INTERFACE IN JAVA


Una interfaz en Java es una colección de métodos abstractos y propiedades constantes.
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.
Ejemplo:

interface Nave {
        public  moverPosicion (int x, int y);
        public  disparar();
        .....
    }

14. ARRAY


Un array, es un tipo de dato estructurado que permite almacenar un conjunto de datos homogeneo, es decir, todos ellos del mismo tipo y relacionados. Cada uno de los elementos que componen un vector pueden ser de tipo simple como caracteres, entero o real, o de tipo compuesto o estructurado como son vectores, estructuras, listas...

Para acceder a los elementos individuales de un array se emplea  un índice que será un número entero no negativo que indicará la posición del elemento dentro del array. Para referirse a una posición particular o elemento dentro del array, especificamos el nombre del array y el número de posición del elemento particular dentro del mismo, el índice.

Los arrays en gran parte se definen como las variables ordinarias, excepto en que cada array debe acompañarse de una especificación de tamaño (número de elementos).

15. COLECCIONES


Las colecciones pueden ser, según se almacenen los objetos, de 2 tipos:

    • Ordenadas: Pueden ser recorridas siguiendo un orden, ya sea por un índice como por el orden en el que se han insertado.
    • Clasificadas: Los objetos están clasificados siguiendo un orden natural.definido por la clase del objeto.

Hay 4 tipos de interfaces de colección:
    • List: Lista de objetos asociados a un índice. Acepta duplicados. Tiene asociada 3 clases a las que implementa:
      • ArrayList: Representa una lista ordenada pero no clasificada. La iteración o recorrido por esta colección es muy rápida.
      • Vector: Igual que ArrayList, pero sus métodos son Synchronized (Ya lo explicaremos más adelante)
      • LinkedList: Representa una lista ordenada y clasificada. La iteración o recorrido por esta colección es mas lenta que por ArrayList o Vector.

    • Set: Representa un conjunto de elementos. No admite duplicados. Tiene asociada 3 clases a las que implementa:
      • HashSet: Es un conjunto no ordenado y no clasificado de elementos.
      • LinkedHashSet: Es un conjunto ordenado y no clasificado de elementos.
      • TreeSet: Es un conjunto ordenado y clasificado.

    • Map: Conjunto de elementos con una clave o identificador. Tiene asociada 4 clases a las que implementa:
      • HashMap: No es ni ordenada ni clasificada, permite tener claves con valor "null" y varios elementos con valor "null".
      • Hashtable: Igual que HashMap, pero con métodos Synchronized.
      • LinkedHashMap: Ordenada por orden de inserción.
      • TreeMap: Es ordenada y clasificada.

    • Queue: Se trata una interfaz de tipo (LIFO) y pila (FIFO). Algo que se debería saber:
      • LIFO: Last In, First Out. Último en entrar, primero en salir.
      • FIFO: First In, First Out: Primero en entrar, primero en salir

    • Tiene una clase asociada a la que implementa (que yo haya estudiado)
      • PriorityQueue: Los elementos son ordenados según su orden natural.