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.


Tema U3.- POO (modificadores de acceso)

MODIFICADORES DE ACCESO:

Los modificadores de acceso nos introducen al concepto de encapsulamiento. El encapsulamiento busca de alguna forma controlar el acceso a los datos que conforman un objeto o instancia, de este modo podríamos decir que una clase y por ende sus objetos que hacen uso de modificadores de acceso (especialmente privados) son objetos encapsulados.
Los modificadores de acceso permiten dar un nivel de seguridad mayor a nuestras aplicaciones restringiendo el acceso a diferentes atributos, métodos, constructores asegurándonos que el usuario deba seguir una "ruta" especificada por nosotros para acceder a la información.
Es muy posible que nuestras aplicaciones vayan a ser usadas por otros programadores o usuarios con cierto nivel de experiencia; haciendo uso de los modificadores de acceso podremos asegurarnos de que un valor no será modificado incorrectamente por parte de otro programador o usuario. Generalmente el acceso a los atributos se consigue por medio de los métodos get y set, pues es estrictamente necesario que los atributos de una clase sean privados.
El modificador private en Java es el más restrictivo de todos, básicamente cualquier elemento de una clase que sea privado puede ser accedido únicamente por la misma clase por nada más. Es decir, si por ejemplo, un atributo es privado solo puede ser accedido por lo métodos o constructores de la misma clase. Ninguna otra clase sin importar la relación que tengan podrá tener acceso a ellos.

EJEMPLO: 



Default:

El modificador por defecto (default)Java nos da la opción de no usar un modificador de acceso y al no hacerlo, el elemento tendrá un acceso conocido como default o acceso por defecto que permite que tanto la propia clase como las clases del mismo paquete accedan a dichos componentes (de aquí la importancia de declararle siempre un paquete a nuestras clases).


viernes, 10 de noviembre de 2017

Tema U3.- POO (método constructor y sobrecarga de métodos)

METODO CONSTRUCTOR:

 Constructores

Un Constructor es una función, método, etc., de las clases, la cual es llamada automáticamente cuando se crea un objeto de esa clase.
Por ser métodos, los constructores también aceptan parámetros. Cuando en una clase no especificamos ningún tipo de constructor, el compilador añade uno público por omisión sin parámetros, el cual NO hace nada.

Características de los Constructores

1.     Un constructor, tiene el mismo nombre de la clase a la cual pertenece.
2.     No puede ser Heredado.
3.     No retorna ningún valor (Ni void), por lo cual no debe especificarse ningún tipo de dato.
4.     Debe declararse como public, sólo en casos realmente extraordinarios será de otro tipo.
Supongamos una clase llamada Datos.



SOBRE CARGA DE MÉTODOS:

Al igual que C++, C# permite sobrecargar operadores para utilizarlos en clases propias. Esto hace posible que utilizar un tipo de datos definido por el usuario parezca tan natural y lógico como utilizar un tipo de datos fundamental. Por ejemplo, podría crear un nuevo tipo de datos denominado ComplexNumber para representar un número complejo y proporcionar métodos que realicen operaciones matemáticas en esos números mediante operadores aritméticos estándar, como utilizar el operador + para sumar dos números complejos.

Tema U3.- POO (retorno de valores)

RETORNO DE VALORES:

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

1.     1. Métodos con valor de retorno sin parámetros 
E    Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
    
       2. Métodos con valor de retorno con parámetros 
E    Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pudo de su llamado.
d    


Tema U3.- POO (parámetros y argumentos)

PARÁMETROS Y ARGUMENTOS:

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


Ejemplo:


Tema U3.- POO (métodos)

MÉTODOS:


Java como todo lenguaje de programación orientado a objetos utiliza los llamados métodos. A continuación, veremos cómo se crea un método y como se utilizan.
Se podría decir que existen 2 grandes tipos de métodos, el primer tipo de método son métodos que realizan procesos, puedes realizar cualquier operación con ellos, sin embargo, el propósito es manipular variables existentes. El segundo tipo de métodos son los que realizan un proceso o calculo, y calculan una variable específica, un ejemplo podría ser un método para obtener el valor de una multiplicación.




Tema U3.- POO (clases y objetos)

CLASES Y OBJETOS:

En la vida diaria podemos pensar en objetos como una manzana o un libro y podemos distinguir clases de cosas: por ejemplo, clases de plantas. Sin embargo, en programación el término objeto y el término clase no guardan una correlación exacta con el significado de estas palabras en la vida diaria. Podemos buscar ciertas similitudes e incluso hacer analogías didácticas. Pero no trates de buscar siempre equivalencias entre objetos y clases en programación con objetos y clases de la vida diaria porque esa correspondencia exacta no existe y te llevará a confusión. Al escribir un programa en un lenguaje orientado a objetos tratamos de modelar un problema del mundo real pensando en objetos que forman parte del problema y que se relacionan entre sí.
Objeto: Entidad existente en la memoria del ordenador que tiene unas propiedades (atributos o datos sobre sí mismo almacenados por el objeto) y unas operaciones disponibles específicas (métodos).
Clase: Abstracción que define un tipo de objeto especificando qué propiedades (atributos) y operaciones disponibles va a tener.
Estas definiciones son quizás poco clarificadoras. Con un ejemplo vamos a entenderlo mejor. En primer lugar, pensemos en un programa que trata de gestionar datos sobre los vehículos de transporte público de una ciudad, por ejemplo, México D.F.

Tema U3.- POO (programación orientada a objetos)

CONCEPTOS GENERALES:

¿Qué es Programación Orientada a Objetos (P.O.O.) y qué ventajas tiene?

Es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas de ordenador. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento.

La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.

¿Qué es un Objeto en Programación?

Un objeto es en realidad un conjunto de métodos (funciones y procedimientos), todos ellos relacionados con un determinado concepto del mundo real. Los objetos son entidades que combinan estado (atributo), comportamiento (método) e identidad: El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).

El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él la identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. Los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento el estado de un objeto es como describir todos los detalles de cierto objeto en un instante determinado así que cada vez que los atributos cambian, se puede decir que el objeto cambia de estado.

¿Qué son los Métodos y los Atributos?

Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos, ya que al hacerlo podría producir un hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.

Tema U2 matrices (tipos)

MATRIZ SIMÉTRICA:


Una matriz necesita dos índices para acceder a sus elementos. Gráficamente podemos representar una matriz como una tabla de n filas y m columnas cuyos elementos son todos del mismo tipo.



MATRIZ TRANSPUESTA:

 La matriz transpuesta, esto quiere decir que las filas de una matriz se convertirán en las columnas de la matriz a crear y las columnas de la matriz dada se convertirán en las filas de la matriz transpuesta.
Ejemplo:

Tema U2 matrices (Definición)

DEFINICIÓN:

Un array en Java puede tener más de una dimensión. El caso más general son los arrays bidimensionales también llamados matrices o tablas.
La dimensión de un array la determina el número de índices necesarios para acceder a sus elementos.
Los vectores que hemos visto en otra entrada anterior son arrays unidimensionales porque solo utilizan un índice para acceder a cada elemento.
Una matriz necesita dos índices para acceder a sus elementos. Gráficamente podemos representar una matriz como una tabla de n filas y m columnas cuyos elementos son todos del mismo tipo.

La siguiente figura representa un array M de 3 filas y 5 columnas:


AQUÍ UN EJEMPLO:

Tema U1 Arreglos (búsqueda secuencial)

BUSQUEDA SECUENCIAL:

Es una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo.

Para efectos de esta explicación visualice el arreglo como una serie de cajas unidas donde podemos almacenar datos del mismo tipo, los arreglos están indexados con una serie de números de van de menor a mayor y que sirven para hacer referencia a cada una de las cajas dentro del arreglo, en java esta índices comienzan en 0.




Tema U1.- Arreglos (métodos)

MÉTODO BURBUJA:

El funcionamiento del algoritmo es bastante fácil, únicamente va recorriendo los elementos del arreglo comparando si es más grande o más chico un elemento que el de al lado, dependiendo si queremos ordenar de forma ascendente o descendente, se realizan las cantidad de vueltas necesarias hasta tener todos los elementos ordenados.





MÉTODO INSERCIÓN:

Consiste en ir insertando un elemento de la lista ó un arreglo en la parte ordenada de la misma, asumiendo que el primer elemento es la parte ordenada, el algoritmo ira comparando un elemento de la parte desordenada de la lista con los elementos de la parte ordenada, insertando el elemento en la posición correcta dentro de la parte ordenada, y así sucesivamente hasta obtener la lista ordenada.