Archivos de la categoría ‘09. Programación orientada a objetos (I)’

Materiales para la Unidad 09

Publicado: Domingo, 20 \20\UTC junio \20\UTC 2010 en 09. Programación orientada a objetos (I)
Presentación

Transcripción de la parte teórica de la unidad 09

Teoría

El tema 9 inicia el verdadero núcleo de este segundo cuatrimestre: la programación orientada a objetos.

Hay mucha gente que insiste en la dificultad que supone cambiar de la programación estructurada a la programación orientada a objetos, pero yo no estoy de acuerdo con esta teoría. Por supuesto, vosotros podréis tener algunas trabas por el hecho de estudiar a distancia, pero entre todos vamos a superarlas.

La programación orientada a objetos se basa realmente en unos pocos conceptos nuevos. El resto es una continuación “natural” a la programación estructurada. Es un intento de aproximarse a nuestra manera de pensar y alejarse de la “manera de pensar” de la máquina. Intentaré explicaros los nuevos conceptos con la mayor sencillez posible a través del blog.

Mientras tanto, estudiad el apartado 5.6 que corresponde al tema que nos ocupa. En él vais a aprender qué es una clase y cómo declararla; y qué es un objeto y cómo declararlo. También aprenderéis a manipular los objetos.

En el último punto del apartado, veréis una iniciación a la herencia, que se desarrollará por completo en el siguiente apartado, pero eso lo veremos en el siguiente tema.

Si entendéis este tema y os gusta algo la programación (que debería ;-), seguro que ahora os gusta de verdad. Veréis qué evolución se ha producido en los lenguajes de programación y con qué “gran estilo” se programa.

Os deseo un buen estudio.

Laboratorio

El laboratorio se visualiza mejor en alta definición (HD) y a pantalla completa.

También tienes la posibilidad de ver el video con subtítulos. Para ello, haz clic sobre el botón “Turn on Captions” (CC).

Novena Práctica de Evaluación (PEV09)Práctica de evaluación

La Novena Práctica de Evaluación del módulo es una práctica dividida en dos partes.

  1. La primera parte consiste en crear una clase en Java con sus atributos y métodos. Es muy importante que hagáis las cosas paso a paso y, utilizando una perspectiva global del problema, completarlo pieza a pieza.

  2. En la segunda parte se complementa el programa anterior para manipular la clase que se ha creado. Es una ampliación al uso de la API que hicimos en la anterior práctica. A diferencia de la anterior práctica (donde yo os daba los objetos y las indicaciones de qué debíais hacer en cada momento), ahora sois vosotros quienes analizaréis y utilizaréis aquellas clases que creáis oportunas.

Recordad que para acceder a la evaluación cuatrimestral, la entrega de todas las PEVs es obligatoria (y cada una de ellas debe tener una nota superior a 2).

Sinopsis de la película  "¿Códigos imposibles?"Documental

Mira el documental “¿Códigos imposibles?”. A continuación, comenta tus impresiones sobre lo que en él se dice en el foro del Aula Virtual.

Enlace al documental en Megavideo: http://www.megavideo.com/?v=3G3QZCMH

Orientaciones didácticas

Las orientaciones didácticas de una unidad son un resumen (no más de un folio) con unas pequeñas pautas  que permiten al alumno hacerse una idea general de qué va a aprender en esa unidad – respecto a los contenidos teóricos – y cómo debe desarrollar la parte práctica.

En estas orientaciones también se incluye un registro organizado con los comentarios realizados por el alumnado durante el desarrollo de la unidad, que seguramente ayudarán a facilitar la comprensión de los conceptos teórico-prácticos.

Aquí tenéis las orientaciones didácticas de la unidad 9:

Introducción a la POO

Publicado: Sábado, 13 \13\UTC junio \13\UTC 2009 en 09. Programación orientada a objetos (I)

La programación orientada a objetos es la penúltima evolución respecto a las metodologías de programación. En esta entrada veremos algunos de los conceptos básicos que conciernen a este tipo de programación, que ampliaremos en entradas siguientes.

Clases y objetos

La programación orientada a objetos se basa en un modelo de lo que vemos en la vida real. Para vosotros no será algo nuevo introduciros en este modelo, ya que habéis realizado un proceso de abstracción muy similar en el modelo Entidad-Interrelación (modelo ER) del módulo Sistemas Gestores de Bases de Datos.

Decíamos en una entrada anterior que “todo programa en Java se construye a base de objetos”. Pero en realidad, el programador de Java no define objetos, sino clases. Y en concreto, clases de objetos.

Pero, ¿qué es una clase? Una clase es una plantilla de un conjunto de objetos que tienen características similares.

La definición en sí nos dice muy poco, pero con un par de ejemplos seguro que lo entendéis muy bien.

________________

Ejemplo 1 (para aquellos que ya habéis estudiado el modelo ER del módulo SGBD).

Una clase es equivalente a una entidad, con algunas características adicionales que posteriormente veremos.
Un objeto es equivalente a una instancia de una entidad.

Ejemplo 2 (para el resto de alumnos).

Haremos una analogía con respecto a la vida real: si os digo que penséis en un caballo, seguramente todos coincidiremos más o menos en algo parecido: un animal que tiene cuatro patas, una cola, cabellera que le sale de la cabeza y llega hasta el lomo, … Pero ese caballo no existe en la realidad, nos hemos creado mentalmente un modelo abstracto para el concepto de caballo. A ese modelo mental es lo que denominaremos clase.

Si queremos, por ejemplo, montar a caballo, será complicado hacerlo en ese modelo que tenemos en la cabeza. Para poder disfrutar con él, necesitamos tener un caballo en concreto. A esa concreción (instancia) del caballo es lo que llamaremos objeto.

Ese caballo (objeto) será único, y no es posible que exista otro igual. Por tanto, tendrá características diferenciadoras al resto de caballos (otros objetos), como el color de su cuerpo, el peso, el largo de sus patas, etcétera.

________________

Gráficamente:

Objetos e instancias

Cuando empecemos a programar en Java, el primer objetivo es construirnos el conjunto de clases adecuadas para resolver los requerimientos de nuestro programa.

Atributos y métodos

Una clase se compone de dos partes fundamentales: los atributos y los métodos.

Atributos

Los atributos contienen información sobre un objeto. Si pensamos en una clase coche, sus atributos podrían ser:

  • cilindrada: 1800, 2000, 2800.
  • color: blanco, azul, negro, plata.
  • gama: monovolumen, cabrio, coupé.

Los atributos se definen por medio de variables, así que podemos considerarlas como variables del propio objeto.

Métodos

Los métodos permiten añadir comportamiento a un objeto. Esta es la diferencia fundamental respecto a lo que conocéis como entidad en el modelo ER aquellos que habéis estudiado el módulo SGBD, puesto que la entidad era algo “estático”.

Un método nos permite interactuar con el objeto al que pertenece, o bien interactuar con otros objetos. Si continuamos con el ejemplo de la clase coche, podríamos tener los siguientes métodos:

  • Arrancar.
  • Parar.
  • Frenar.
  • Acelerar.

Los métodos se definen por medio de funciones, así que podemos considerarlos como funciones del propio objeto.


Creative Commons License
Introducción a la POO by Cristian Jorge Garcia Marcos is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.

Mi primera clase en Java

Publicado: Sábado, 13 \13\UTC junio \13\UTC 2009 en 09. Programación orientada a objetos (I)

Una vez aprendidos los conceptos teóricos sobre las clases y objetos en Java, apliquemos lo estudiado en la práctica.

Utilizaremos para este ejemplo la clase coche de la que hablamos en la entrada anterior.

Mi primera clase

El primer paso es definir la clase, de la siguiente manera:

class Coche {

}

Ya tenemos el primer paso. No parece tan difícil, ¿verdad?

El segundo paso es especificar qué atributos necesitamos en nuestro coche. Por ejemplo:

class Coche {

Integer cilindrada;

String color;

Double precio;

boolean isArrancado;

}

Bien, ya tenemos cuatro atributos: cilindrada de tipo Integer (fijaos que no he utilizado el tipo básico int, sino su envoltorio Integer); color de tipo String; precio de tipo Double (al igual que en el caso de cilindrada, no utilizo el tipo básico, sino su envoltorio, en este caso Double en lugar de double); e isArrancado de tipo boolean. Esta última indica si el motor del coche está arrancado o no lo está.

El tercer y último paso para construir nuestra clase es definir el comportamiento (métodos) de nuestro coche. En concreto, únicamente vamos a tratar que el coche haya arrancado o esté parado. Para ello, haremos lo siguiente:

void arrancar() {

if (isArrancado != true) {

isArrancado = true;

System.out.println (“¡¡¡Brrrrrrr!!! El coche acaba de arrancar.”);

} else {

System.out.println (“¡¡¡Kisch, kishch!!! El coche ya está arrancado.”);

}

}

El método arrancar() comprueba si el coche está arrancado. Si no lo está, lo arranca (con la línea isArrancado = true) y nos avisa con un mensaje. Si lo está, simplemente nos informa que el coche ya había arrancado.

Ya tenemos creada la clase completa. El código completo es este:

class Coche {

Integer cilindrada;

String color;

Double precio;

boolean isArrancado;

void arrancar() {

if (isArrancado != true) {

isArrancado = true;

System.out.println (“¡¡¡Brrrrrrr!!! El coche acaba de arrancar.”);

} else {

System.out.println (“¡¡¡Kisch, kishch!!! El coche ya está arrancado.”);

}

}

}

Fijaos que primero se definen los atributos y a continuación los métodos, esto es por convención de Java.

Este fichero debemos grabarlo con el nombre de la clase que hemos definido, seguido de la extensión .java. Es decir, debemos guardar el fichero con el nombre Coche.java.

Añadiendo funcionalidad a la clase

Vamos a añadir un método para conseguir mayores prestaciones sobre la clase y para que veáis qué sencillo es ampliar el comportamiento de una clase.

El nuevo método nos permitirá mostrar el valor de cada uno de los atributos. Vamos a llamarlo verCoche(). El código es este:

void verCoche() {

System.out.println(“Este coche es de color ” + color + ” tiene una cilindrada de ” + cilindrada + ” y cuesta ” + precio + ” euros.”);

if (isArrancado == true) {

System.out.println (“Ahora mismo está arrancado.”);

} else {

System.out.println (“Ahora mismo está parado.”);

}

}

Este método mostrará dos líneas por pantalla: la primera mostrará el color, cilindrada y precio del coche y la segunda nos dirá si el coche está arrancado o parado.

Introducimos dentro de la clase este nuevo método y volvemos a guardar el fichero. El código ahora es este:

class Coche {

Integer cilindrada;

String color;

Double precio;

boolean isArrancado;

void arrancar() {

if (isArrancado != true) {

isArrancado = true;

System.out.println (“¡¡¡Brrrrrrr!!! El coche acaba de arrancar.”);

} else {

System.out.println (“¡¡¡Kisch, kishch!!! El coche ya está arrancado.”);

}

}

void verCoche() {

System.out.println(“Este coche es un ” + marca + ” de color ” + color + ” y cuesta ” + precio + ” euros.”);

if (isArrancado == true) {

System.out.println (“y ahora mismo está arrancado.”);

} else {

System.out.println (“y ahora mismo está parado.”);

}

}

}

Crear un programa para trabajar con la clase

Ya podemos compilar el fichero. Pero únicamente hemos definido una clase, con lo que no es posible ejecutar nada, ya que no hay nada que ejecutar.

Necesitamos un programa que nos permita trabajar con la clase coche que acabamos de crear. Este programa deberá crear objetos de la clase (recordad que “una clase” no es algo que exista en realidad, sino una plantilla de esa realidad, que es el objeto) y trabajar con ellos.

Veamos un ejemplo de programa y después lo comentaremos.

public static void main (String args[]) {

Coche c;

c = new Coche();

c.cilindrada= 1800;

c.color = “plata”;

c.precio = 25000.0;

System.out.println (“¿Qué coche es este?”);

c.verCoche();

System.out.println(“Vamos a arrancar el coche”);

c.arrancar();

System.out.println (“¿Qué coche es este?”);

c.verCoche();

System.out.println(“Vamos a arrancar el coche”);

c.arrancar();

}

El método main() ya lo conocéis de vuestro primer programa HolaMundo.java que hicisteis hace unos días. Ahora ya tenemos un programa que podemos ejecutar.

Declaración y acceso a los objetos

Comentemos el programa anterior para entender cómo se trabaja en Java con los objetos.

En la primera línea, Coche c; , se declara un objeto de la clase Coche. A diferencia de C, la declaración no significa reserva en memoria. En el momento de la declaración, el objeto tiene el valor null. Para “crear” un objeto en realidad (y por tanto poder trabajar con él), se necesita utilizar el operador new.

La segunda línea c = new Coche();, crea un objeto de la clase Coche y lo asigna al objeto que se había declarado en la anterior línea.

A partir de la tercera línea, se comienza a trabajar con el objeto recién creado. Con estas tres líneas:

c.cilindrada= 1800;

c.color = “plata”;

c.precio = 25000;

hemos modificado los atributos cilindrada, color y precio de nuestro objeto. Fijaos que el acceso a los atributos del objeto se realiza mediante el operador punto (.). Simplemente hemos de utilizar la siguiente sintaxis:

objeto.atributo

A partir de ese momento, realizamos varias llamadas a los métodos. Por ejemplo:

System.out.println (“¿Qué coche es este?”);

c.verCoche();

Primero se muestra un mensaje de información y a continuación se accede al método verCoche() para comprobar si todo el código anterior de modificación de atributos ha funcionado correctamente. De la misma manera que ocurría para el acceso a los atributos, el acceso a los métodos utiliza la siguiente sintaxis:

objeto.método

Destrucción de objetos

Respecto a la destrucción de objetos, no debemos preocuparnos en absoluto, ya que Java tiene el llamado garbage collector (recolector de basura) que se encarga de realizar toda la gestión de memoria por nosotros automáticamente.


Creative Commons License
Mi primera clase en Java by Cristian Jorge Garcia Marcos is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.