lunes, 6 de mayo de 2013

Herencia - Superclases y subclases

Al pensar en el término Figura geométrica algunos puede imaginar un cuadrado inmediatamente, otros un círculo, algunos más un triángulo, y los más raros un octágono.
A pesar de ser figuras diferentes, comparten algunas cosas en común, como tener área, tener perímetro, etc.
Si este concepto lo aplicamos en la programación orientada a objetos, en la que FiguraGeometrica fuera una clase; las clases: Círculo, Cuadrado, Triangulo, Octágono, serían subclases de la superclase FiguraGeometrica.

Pensemos en otro ejemplo.

La superclase Fruta puede tener infinitas sublcases como: Manzana, Mango, Pera, Uva, etc. Todas estas subclases deben tener algo en común que han heredado de la clase Fruta.
La superclase Fruta debe ser más abstracta (generalizada).
Las subclases Manzana, Mango, Pera y Uva deben ser más específicas.
 Si intentamos definir la clase Fruta muy rápidamente quedaría de la siguiente forma:

public class Fruta{
    private String color;
    private double peso;
         [...]
}

Si al describirnos una fruta, intentaran darnos solo el color y el peso, tal vez tendríamos alguna idea de qué fruta se trata, pero no estaríamos seguros, ahora veamos cómo sería la definición de la subclase Manzana:

public class Manzana extends Fruta{
    private String tipo;
    private double precio;
    private String temporada;
    [...]
}

Este fue un ejemplo muy sencillo, ahora te corresponde a ti intentar definir la superclase y las subclases de otros ejemplos como Vehículos, Animales, etc.

martes, 30 de octubre de 2012

jueves, 25 de octubre de 2012

Crear un objeto en Java

Como hemos visto anteriormente, las clases son los modelos abstractos de los objetos, y los objetos son instancias de las clases. Para poder generar un objeto en Java, primero debemos tener construida su clase.

Supongamos que tenemos la Clase "Perro" y que queremos generar un nuevo objeto, recordemos que es en el objeto donde podemos definir los datos del Perro, así es que generaremos un objeto de tipo Perro y le pondremos nombre y raza.

Para construir el objeto, debemos invocar al constructor de la clase Perro.

En Java, puede haber uno o más constructores, dependiendo de qué datos le queramos poner, pero si nosotros no escribimos un constructor, Java genera automáticamente uno, sin datos de entrada.

Supongamos que el constructor de nuestra clase Perro es el siguiente

public Perro(String n, String r){
     nombre = n;
     raza = r;
}

Este constructor debe estar dentro de la clase Perro.

En este ejemplo, nuestro constructor nos está solicitando como parámetros dos String's (n, r) y estos, los asigna a las variables "nombre" y "raza" que deben estar anteriormente declaradas en la clase Perro, o de lo contrario, el programa no compilará.

Hay dos maneras de generar un nuevo objeto, y son las siguientes:

Perro perrito1;perrito1 = new Perro("Firulais", "Salchicha");


Perro perrito1 = new Perro("Firulais", "Salchicha");

En esta instrucción decimos que queremos un objeto perrito1 de tipo Perro, al mismo tiempo que declaramos perrito1, le asignamos un valor, este valor, será el nuevo objeto que crearemos con la instrucción new. Como observamos, al escribir Perro("Firulais", "Salchicha"); estamos colocando los String's que nos solicita el constructor, estos deben ir entre comillas siempre.

Una vez que esa instrucción se ejecuta, el objeto perrito1 puede llevar a cabo los métodos que tenga declarados la clase Perro.

Intenta generar un objeto perrito2 que tenga por nombre "Pulgas" y de raza "Chihuahua".




Fuente:
POO con Java, una introducción usando BlueJ

lunes, 22 de octubre de 2012

Objetos y Clases

Cuando escribes un programa de computación en un lenguaje orientado a objetos, estás creando en tu computadora un modelo de alguna parte del mundo real. Las partes con que se construye el modelo provienen de los objetos que aparecen en el dominio del problema. Estos objetos deben estar representados en el modelo computacional que se está creando.

Los objetos pueden ser organizados en categorías y una clase describe, en forma abstracta, todos los objetos de un tipo particular.

Podemos aclarar estas nociones abstractas mediante un ejemplo.

Supón que deseas modelar una simulación de tráfico. Un tipo de entidad con la que tendrás que trabajar es autos. ¿Qué es un auto en nuestro contexto?, ¿Es una clase o es un objeto? Algunas preguntas nos ayudarán a tomar una decisión.
  • ¿De qué color es un auto?
  • ¿Cuán rápido puede correr?
  • ¿Dónde está en este momento?


Observarás que no podemos responder estas preguntas a menos que hablemos de un auto específico. La razón es que, en este contexto, la palabra "auto" refiere a la clase auto, puesto que estamos hablando de los autos en general y no de uno en particular.

Si digo "Mi viejo auto rojo se encuentra estacionado en el garaje de la casa", podemos responder todas las preguntas anteriores: este auto es rojo, no marcha demasiado rápido y está en mi garaje. Ahora estoy hablando de un objeto, un ejemplo particular de un auto.

Generalmente, cuando nos referimos a un objeto en particular, hablamos de una instancia. De aquí en adelante usaremos regularmente el término "Instancia". Instancia es casi un sinónimo de objeto. Nos referimos a objetos como instancias cuando queremos enfatizar que son de una clase en particular (como por ejemplo, cuando decimos "este objeto es una instancia de la clase auto").



Fuente:
POO con Java, una introducción usando BlueJ

miércoles, 10 de octubre de 2012

Ventajas y desventajas de la Programación Orientada a Objetos


A continuación presentamos las ventajas y desventajas de la Programación Orientada a Objetos (POO).

Ventajas:
  • Reusabilidad. Cuando hemos diseñado adecuadamente las clases, se pueden usar en distintas partes del programa y en numerosos proyectos.
  • Mantenibilidad. Debido a las sencillez para abstraer el problema, los programas orientados a objetos son más sencillos de leer y comprender, pues nos permiten ocultar detalles de implementación dejando visibles sólo aquellos detalles más relevantes.
  • Modificabilidad. La facilidad de añadir, suprimir o modificar nuevos objetos nos permite hacer modificaciones de una forma muy sencilla.
  • Fiabilidad. Al dividir el problema en partes más pequeñas podemos probarlas de manera independiente y aislar mucho más fácilmente los posibles errores que puedan surgir.
Desventajas:
  • Cambio en la forma de pensar de la programación tradicional a la orientada a objetos.
  • La ejecución de programas orientados a objetos es más lenta.
  • La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento.

miércoles, 3 de octubre de 2012

Variables en Java

Para todos nosotros es más fácil memorizar un nombre, que una serie de dígitos, por ejemplo:
Supongamos que estás registrado en una escuela y tu ID es: 11239401245, y tu nombre es "Juan", es más fácil recordar Juan que todos los dígitos del ID.
En Java, se les denomina VARIABLES a esos nombres que nos ayudarán a referirnos a una dirección de la memoria, así, en vez de tener que escribir que almacene cierto valor en determinado lugar en la memoria, solo declaramos una variable con un nombre y Java le asigna una posición en la memoria.

Supongamos que en la memoria, tenemos almacenados los siguientes datos:

  • En la posición 39991 tengo almacenado el valor 4
  • En la posición 21234 tengo almacenado el valor 2
Para sumarlas tendría que decir:
Suma el valor de la posición 39991 más el valor de la posición 21234 y guárdalo en la posición 39421

Resulta mucho más fácil ponerle nombre a estas direcciones, y así decir:

n1 + n2 = n3

Cómo declarar una variable en Java

Antes de poder usar las variables tenemos que declararlas e inicializarlas.

Para declarar una variable en Java debemos seguir la siguiente estructura:
<modificador de alcance>  <tipo>  identificador;
El modificador de alcance puede ser de varios tipos como: public y private.
Como ya sabemos, el modificador de alcance determinará la visibilidad de la variable, y se recomienda que todos los atributos sean privados, con un método público opcional para acceder a él.

Todas las variables deben ser de algún tipo, ya sean primitivos (predefinidos por Java) o creados por el propio programador.

El identificador es el nombre que llevará la variable, y debe cumplir ciertas reglas para ser válido, estas reglas son las mismas que los identificadores de las clases y métodos.

Un ejemplo de una declaración de una variable de nombre "miVariable1" de tipo entero (int) y de alcance privado:
private int miVariable1;
 Si queremos declarar muchas variables del mismo tipo, en vez de hacer una nueva línea para cada una de ellas, las podemos declarar de esta manera:
private int miVariable1, miVariable2, miVariable3;

Inicialización de las Variables en Java 

Se le denomina inicialización al momento de asignarle un valor a las variables, esto se puede realizar desde su declaración o en otro momento, si se quiere realizar desde su declaración, a esta se le debe agregar el operador "=" y el valor que se desea asignar.
Por ejemplo:
private int miVariable1 = 3;
Si queremos inicializar la variable en otro momento, simplemente la debemos declarar al principio, y la inicialización la podemos colocar donde queramos, una vez que ya está declarada la variable, para inicializarla solo debemos escribir su identificador, el operador "=" y el valor que queremos asignar.
Por ejemplo:
miVariable2 = 6;

Tipos de datos primitivos de Java


-boolean
Almacena valores que pueden ser verdaderos o falsos.
Ocupa 1-bit y el valor por defecto es false.

-char
Almacena un caracter.
Los caracteres son de 16 bits y están codificados en Unicode 1.1.5

-byte
Almacena enteros de 8 bits con signo, es decir, número entre menos (dos a la séptima) y dos a la octava.
La representación interna es en complemento a 2.

-short
Almacena enteros de 16 bits con signo.
La representación interna es en complemento a 2.

-int
Almacena enteros de 32 bits con signo.
La representación interna es en complemento a 2.

-long
Almacena enteros de 64 bits con signo.
La representación interna es en complemento a 2.

-float
Almacena numeros reales con decimales de 32 bit con coma móvil.

-double
Almacena reales de 32 bit con coma móvil.