sábado, 11 de noviembre de 2017

Tema U3.- POO (polimorfismo)

POLIMORFISMO:

El polimorfismo es un concepto de la programación orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma específica. 
En general nos sirve para programar objetos con características comunes y que todos estos compartan la misma superclase en una jerarquía de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programación.

CLASIFICACION:

Se puede clasificar el polimorfismo en dos grandes clases:
DINAMICO Y ESTATICO:

*Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.


Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.


Tema U3.- POO (clases y métodos abstractos)

CLASES Y MÉTODOS ABSTRACTOS EN JAVA.
Supongamos un esquema de herencia que consta de la clase Profesor de la que heredan Profesor Interino y ProfesorTitular. Es posible que todo profesor haya de ser o bien Profesor Interino o bien ProfesorTitular, es decir, que no vayan a existir instancias de la clase Profesor. Entonces, ¿qué sentido tendría tener una clase Profesor? 
El sentido está en que una superclase permite unificar campos y métodos de las subclases, evitando la repetición de código y unificando procesos. Ahora bien, una clase de la que no se tiene intención de crear objetos, sino que únicamente sirve para unificar datos u operaciones de subclases, puede declararse de forma especial en Java: como clase abstracta. La declaración de que una clase es abstracta se hace con la sintaxis public abstract class NombreDeLaClase {…}. Por ejemplo, public abstract class Profesor. Cuando utilizamos esta sintaxis, no resulta posible instanciar la clase, es decir, no resulta posible crear objetos de ese tipo. Sin embargo, sigue funcionando como superclase de forma similar a como lo haría una superclase “normal”. La diferencia principal radica en que no se pueden crear objetos de esta clase.

Tema U3-. POO (sobreescritura de miembros y sobresescritura de métodos)

SOBRE ESCRITURA DE MIEMBROS:

La sobrecarga y sobre escritura no son más que dos conceptos aplicados al trabajo con métodos, específicamente en el uso que le queremos dar...... estos conceptos dependen principalmente de nuestra lógica de programación y el enfoque o forma de trabajo.... depende de lo que queremos hacer....... ¿Como así?...... veamos de forma más clara cada concepto....

Sobrecarga de métodos

En java sabemos que, si ya declaramos una variable o un método con un nombre en específico, no podemos declarar otra variable o método que se llame igual…. sin embargo, esta regla no aplica cuando usamos la Sobrecarga de métodos, ya que esta permite usar el mismo nombre del método, pero solo si se tiene diferente firma…. ¿firma?....... cuando hablamos de la firma de un método, nos referimos a sus parámetros......


en resumen, la sobrecarga permite declarar métodos que se llamen igual pero que reciban parámetros diferentes (no puede haber 2 métodos con el mismo nombre y los mismos parámetros), por esta razón lo que define a que método se ingresa, son los argumentos que se envían como parámetros....



Sobre escritura de métodos

La Sobre escritura es la forma por la cual una clase que hereda puede re-definir los métodos de su clase Padre, de esta manera puede crear nuevos métodos con el mismo nombre de su superclase....(si no conoces la herencia deberías ver este ejemplo...)
es decir, si tengo una clase padre con el método ingresar () yo puedo crear en la clase hija un método que también se llame ingresar () pero implementándolo según lo que necesite (siguiendo obviamente unas reglas que veremos más adelante) ....  a esto se le llama sobre escritura….


Tema U3.- POO (herencia)

HERENCIA:

La herencia en la programación es nada más y nada menos que usar los atributos y métodos que ya existen, en la POO se hace heredando de la clase que contengan los elementos necesarios para tal fin. La herencia en java (y en otros lenguajes) se declara con la palabra reservada extends seguidamente de la clase de la cual deseemos heredar. Esto se realiza con la finalidad de reutilizar código, como también es la base para el implementar el polimorfismo.


Tema U3.- POO (constantes y miembros estáticos de una clase)

CONSTANTES:

La palabra clave que java ha reservado para definir constantes es la palabra "final". En java es muy simple definir constantes, solo basta con ponerles el modificador final antes de la declaración del tipo. Al definir un dato como constante le podremos asignar un valor por primera vez y luego de eso no será posible cambiarle ese valor. Una vez inicializado el dato, este no podrá cambiar su valor de ninguna forma.





MIEMBROS ESTÁTICOS DE UNA CLASE:

El modificador 'static' tiene un profundo impacto en el comportamiento de una variable o método por ello es que normalmente se trata a este modificador completamente separado de los demás. Para entender la forma en que un miembro estático (static) trabaja, veremos primeramente una razón para la cual utilizarlo.
Imaginemos que se cuenta con una clase de utilidad que tiene un método que siempre se ejecuta de la misma manera, por decir un ejemplo, un método que siempre devuelve un valor aleatorio. No importa qué instancia de la clase esté llamando a éste método, siempre se comportará de la misma manera. En otras palabras, el comportamiento del método es independiente de la instancia de la clase o, lo que es lo mismo, del estado actual del objeto.

Imaginemos otro escenario. Supongamos que se desea realizar un conteo de todas las instancias que se tienen de una clase en particular, ¿dónde debería de almacenarse dicha variable? no funcionará el mantenerla como una variable de instancia dentro de la clase a la cual se quiere realizar el conteo ya que al momento de instanciarla el contador se inicializará a su valor por defecto (como sucede con todas las variables de instancia), entonces, ¿cómo haremos para realizar este conteo?
Para resolver un poco la situación planteada anteriormente pongamos en claro que las variables y los métodos marcados con el modificador 'static', es decir, variables y métodos estáticos pertenecen a la clase, no a una instancia de dicha clase en particular. De hecho, se pueden utilizar componentes estáticos sin tener una instancia de la clase. Pero en caso de que existan instancias de dicha clase, el componente estático de la misma será compartido por todas aquellas instancias existentes en un momento dado; solo existe una copia.

El código a continuación declara y utiliza una variable para nuestro contador estático:





Tema U3.- POO (encapsulamiento y métodos accesores)

ENCAPSULAMIENTO Y METODOS ACCESORES:

El encapsulamiento habla del método de ocultar como ha sido simplemente el estado, los atributos, de un objeto. 
Se accede a este estado atravesó de los métodos públicos, es decir su interfaz pública. Una buena práctica es hacer 
las validaciones correspondientes a los posibles estados del objeto, en estos métodos, de modo tal de mantener al 
objeto en un estado consistente.
También se le llama “información hiding”. De la misma forma podemos respetar el modo de modificar la velocidad y 
solo se la puede modificar por los métodos acelerar ()y frenar (),no se puede cambiar la velocidad de ninguna otra 
forma. Los métodos de acceso son el medio de acceder a los atributos privados del objeto. Son 
métodos públicos del objeto.
El getter:
El método para acceder a los atributos en forma de solo lectura se los denomina “getters”. Son los métodos que 
retornan el valor de los atributos. El NetBeans, como la mayoría de los entornos de desarrollo, permite generarlos 
de forma automática.

El setter:

El método para acceder a los atributos en forma de solo lectura se los denomina “getters”.Son los métodos que 
establecen el valor de los atributos. También se les genera de forma automática en los entornos de desarrollo.

Tema U3.- POO (modificadores de acceso)

PROTECTED:

 El modificador de acceso protected nos permite acceso a los componentes con dicho modificador desde la misma clase, clases del mismo paquete y clases que hereden de ella (incluso en diferentes paquetes). Veamos:




PUBLIC:

 El modificador de acceso public es el más permisivo de todos, básicamente public es lo contrario a private en todos los aspectos (lógicamente), esto quiere decir que, si un componente de una clase es public, tendremos acceso a él desde cualquier clase o instancia sin importar el paquete o procedencia de ésta.