1. Clases
Al hablar en términos de la programación orientada a objetos, se podría decir que el objeto celular es una instancia de una clase conocida como "ClaseCelular". Los celulares tienen características (color, peso, ancho, alto, grosor y otros) y comportamientos (enviaMensajes, recibeMensajes, seleccionDeTono, seleccionDeFondo, llamada y otros).
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas, se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla, se le llama CLASE y a los equipos que fabrican a partir de ella, OBJETOS.
Definición teórica:
La clase es una plantilla o prototipo que define los atributos y métodos de un objeto. También se puede decir que es una plantilla genérica para un conjunto de objetos de similares características.
Para crear una clase Java, se debe definir su ámbito, utilizar la palabra reservada class y luego, dar un nombre que empieza con mayúscula.
public class Convierte {
atributos…
métodos…
}
2. Objetos
La tecnología orientada a objetos ya no se aplica solamente a los lenguajes de programación, sino también, en el análisis y diseño. Lo interesante de la Programación orientada a objetos (POO) es que
proporciona conceptos y herramientas con los cuales se modela y representa el mundo real, tan fielmente como sea posible.
Analizando un poco más a un objeto del mundo real, como por ejemplo, una computadora. No se necesita ser experto en hardware para saber que una computadora está compuesta internamente por varios componentes: la tarjeta madre, el chip del procesador, un disco duro, una tarjeta de video y otras partes más. El trabajo en conjunto de todos estos componentes hace operar a una computadora.
Internamente, cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compañías con diversos métodos de diseño. Cada componente es una unidad autónoma y todo lo que se requiere saber de adentro es cómo interactúan entre sí los componentes (si
el procesador y las memorias son compatibles con la tarjeta madre o identificar dónde se coloca la tarjeta de video).
La programación orientada a objetos trabaja de esta manera. Todo el programa está construido en base a diferentes componentes (objetos), cada uno tiene un rol específico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas.
Todo objeto del mundo real tiene 2 componentes: características y comportamiento.
Por ejemplo, los automóviles tienen características (marca, modelo, color, velocidad máxima, entre otros) y comportamiento (frenar, acelerar, retroceder, seguridad (cinturón), cambiar llantas, entre otros).
Los objetos de software, al igual que los objetos del mundo real, también tienen características y comportamientos. Un objeto de software mantiene sus características en una o más "variables" e implementa su comportamiento con "métodos". Un método es una función o subrutina asociada a un objeto.
Definición teórica:
Un objeto es una unidad de código con atributos y métodos predefinidos. Para definir un objeto, primero debe ser instanciado, es decir, el sistema proporciona recursos (memoria) y luego, se podrán usar sus métodos.
3. Atributos, métodos y constantes
Una clase en Java puede contener atributos, métodos y constantes. Los atributos, generalmente, son variables u otros objetos privados. Los métodos son fragmentos de código que realizan un procesamiento y finalmente, las constantes son variables u otros objetos que toman un dato que nunca cambiará en la clase Java que se está construyendo.
4. Constructores
En Java, los constructores poseen el mismo nombre de la clase a la cual pertenece y no puede regresar ningún valor. Por ejemplo, si se añadiera a la clase MiembrosDeClase, dos constructores, tendrían que ser llamados también MiembrosDeClase. Cuando en una clase no se escribe propiamente un constructor, Java asume uno por defecto.
4.1 Constructor por defecto
Es un constructor sin parámetros que, 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 ceros, los alfanuméricos a nulos y las referencias a objetos a null).
Ejemplo: un constructor por defecto para la clase MiembrosDeClase quedaría de la forma siguiente:
public MiembrosDeClase() {
}
Como se observa, el constructor no posee ningún parámetro.
Java crea un constructor por defecto si no hemos definido ninguno en la clase, pero si en una clase definimos un constructor ya no se crea automáticamente el constructor por defecto.
Java incluye automáticamente una llamada al constructor por defecto de la super-clase, super(). Esta llamada a los constructores de las super-clases llega hasta el origen de la jerarquía de clases, esto es al constructor de Object.
Este constructor se ejecuta cuando, desde otra clase, se instancia el objeto de la forma siguiente:
MiembrosDeClase ejemplo = new MiembrosDeClase();
También se puede crear un constructor con parámetro:
public MiembrosDeClase(Double radio) {
this.radio = radio;
}
Se puede ejecutar este constructor si se instancia un objeto de la siguiente forma:
MiembrosDeClase ejemplo = new MiembrosDeClase(12.5);
5. Principios básicos de la POO
5.1 Encapsulamiento
El encapsulamiento es inherente en la clase como una característica para ocultar los atributos. La utilidad del encapsulamiento permite manejar la complejidad, ya que tendrá a las clases como cajas negras donde solo se conoce el comportamiento, pero no los detalles internos. Esto es conveniente porque lo que interesa es conocer qué hace la clase, pero no será necesario saber cómo lo hace.
El encapsulamiento provee dos principales beneficios a los desarrolladores de software:
- Modularidad, esto es, el código fuente de un objeto puede ser escrito, así como, darle mantenimiento, independientemente del código fuente de otros objetos. Asimismo, un objeto puede ser transferido alrededor del sistema sin alterar su estado y conducta.
- Ocultamiento de la información, es decir, un objeto tiene una "interfaz pública" que otros objetos pueden utilizar para comunicarse con él. Pero el objeto puede mantener información y métodos privados que pueden ser cambiados en cualquier tiempo sin afectar a los otros objetos que dependan de ello.
- Reutilización, es decir, gracias al encapsulamiento se pueden reutilizar las clases en el proyecto o en otros proyectos.
- Transferencia de datos, significa que existen métodos conocidos como getter y setter que permiten, a través de ellos, intercambiar datos con otros objetos.
- Los objetos proveen el beneficio de la modularidad y el ocultamiento de la información, mientras que las clases proveen el beneficio de la reutilización. Los programadores de software utilizan la misma clase, y por lo tanto, el mismo código, una y otra vez para crear muchos objetos.
- Un ejemplo básico de encapsulamiento se aprecia en los DTO (Data Transfer Object), objetos de transferencia de datos.
5.2 Herencia
Java permite el empleo de la herencia, característica muy potente que define una clase, tomando como base a otra ya existente. Esto es una de las bases de la reutilización de código, en lugar de copiar y pegar.
En Java, la herencia se especifica agregando la cláusula extends después del nombre de la clase. En la cláusula extends, se indica el nombre de la clase base, de la cual se quiere heredar. Por ejemplo, si se desea crear una clase Baldor extendida de la clase Convierte, este haría uso de extends.
Java no permite la herencia múltiple, sin embargo permite a las clases implementar múltiples interfaces.
Al heredar una clase base, se heredan tanto los atributos como los métodos públicos y protegidos, mientras que los constructores son utilizados, pero no heredados.
5.3 Polimorfismo
El polimorfismo es un concepto de la programación orientada a objetos que permite programar en forma general, en lugar de hacerlo en forma específica.
En líneas generales, 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 simplifica la programación.
Por ejemplo, se puede definir la clase abstracta Animal y definir en ella, el método muerde():
package polimorfismo:
public abstract class Animal{
public abstract String muerde();
}
Luego, se pueden crear clases extendidas de la clase Animal como Pulga y Tiranosaurio:
package polimorfismo:
public class Pulga{
public String muerde(){
return "Pulga picando";
};
}
package polimorfismo:
public class Tiranosaurio{
public String muerde(){
return "Tiranosaurio mordiendo";
};
}
Luego que ya se tiene Pulga y Tiranosaurio que son de Animal, se podrán
utilizar objetos de ellos y apreciar el polimorfismo.
package polimorfismo:
public class Main{
static public void main(){
Animal animal;
Tiranosaurio t= new Tiranosaurio;
Pulga p = new Pulga();
animal=t;
System.out.println(animal.muerde());
animal=p;
System.out.println(animal.muerde());
};
}
6. Interfaces y diferencias con clases
En Java, una interface se utiliza para planificar las operaciones que la aplicación realizará. Por ejemplo, se podrán definir las operaciones que se desean hacer con respecto a la figura geométrica cuadrado.
En la interface Cuadrado se está planificando que el cálculo del área y del perímetro. Cuando se define la interface, se hace una abstracción, es decir, se planifica sin entrar en detalles del cómo se hará, sino de lo que se desea hacer.
public interface Cuadrado{
public Double area (Double lado);
public Double perimetro (Double lado);
}
Luego de definir la interface (la planificación), entonces viene la clase Cálculos (implementación) como se puede apreciar a continuación:
public class Calculos implements Cuadrado{
@Override
public Double area (Double lado){
Double a = lado * lado;
return p;
}
public Double perimetro (Double lado){
Double p=4*lado;
return p;
}
}
No hay comentarios:
Publicar un comentario