1. PILARES DE LA POO
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.
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.
- 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.
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.
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
).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.
Es 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.