programacion orientada a objetos java

79
UD – Lenguajes y Herramientas de Desarrollo de Software Actividad 2: Programación orientada a objetos

Upload: alexander-ramirez-melendez

Post on 30-Jun-2015

283 views

Category:

Education


8 download

DESCRIPTION

POO

TRANSCRIPT

Page 1: Programacion orientada a objetos Java

UD – Lenguajes y Herramientas de Desarrollo de Software

Actividad 2: Programación orientada a objetos

Page 2: Programacion orientada a objetos Java

Introducción

El contenido de la siguiente presentación es íntegramente el contenido del curso Java Programming Language, Java SE 6 de Oracle, con algunos agregados propios de Iberotec.

Se utiliza el material oficial de Oracle, por ser Iberotec miembro del Oracle Academy.

Page 3: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 4: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 5: Programacion orientada a objetos Java

Ingeniería de Software

Ingeniería de Softwareo La ingeniería de software es una disciplina compleja y, a

menudo, difícil de controlar. Durante la segunda mitad del siglo anterior, los informáticos, ingenieros de software y diseñadores de sistemas dedicaron sus esfuerzos a crear sistemas de software más sencillos mediante el uso de código reutilizable. En la siguiente figura se ofrece una breve historia de la ingeniería de software.

Page 6: Programacion orientada a objetos Java

Ingeniería de Software

Breve historia de la Ingeniería de Software

Page 7: Programacion orientada a objetos Java

Ingeniería de Software

Al principio dedicaron sus esfuerzos a crear lenguajes que ocultaran la complejidad del lenguaje máquina y agregaron llamadas a procedimientos en el sistema operativo para manejar operaciones comunes tales como la apertura, lectura o escritura de archivos.

Otros desarrolladores agruparon en diferentes bibliotecas conjuntos de funciones y procedimientos comunes que abarcaban desde el cálculo de la cargas estructurales para ingeniería (NASTRAN), hasta la transmisión de caracteres y flujos de bytes entre los equipos conectados a una red (TCP/IP), el acceso a los datos a través de un método de acceso secuencial indexado (ISAM) o la creación de ventanas y otros objetos de interfaz de usuario en un monitor gráfico (X-Windows y Open Look).

Page 8: Programacion orientada a objetos Java

Ingeniería de Software

Muchas de estas bibliotecas manejan los datos en forma de estructuras de registros abiertas, como es el caso de las estructuras struct del lenguaje C. El principal problema de las estructuras de registros es que el diseñador de la biblioteca no puede ocultar la implementación de los datos utilizada en los procedimientos.

Esto dificulta la tarea de modificar la implementación de la biblioteca sin tocar el código cliente porque ese código normalmente está ligado a los aspectos específicos de las estructuras de datos.

Page 9: Programacion orientada a objetos Java

Ingeniería de Software

A finales de los 80, la programación orientada a objetos se popularizó con la llegada de C++. Una de las grandes ventajas de la programación OO era su capacidad para ocultar determinados aspectos de la implementación de la biblioteca para que las actualizaciones no afectasen al código cliente (suponiendo que no se produjesen cambios en las interfaces). Otra ventaja importante era que los procedimientos estaban asociados a la estructura de datos. La combinación de atributos de datos y procedimientos (llamados métodos) se conoce como clase.

Page 10: Programacion orientada a objetos Java

Ingeniería de Software

En la actualidad, el equivalente de las bibliotecas de funciones son las bibliotecas de clases o los kits de herramientas (toolkits). Esas bibliotecas proporcionan clases para realizar muchas de las operaciones que realizan las bibliotecas de funciones, pero, gracias al uso de las subclases, los programadores del código cliente pueden ampliar estas herramientas con facilidad para utilizarlas en sus propias aplicaciones. Las infraestructuras de programación proporcionan interfaces (API) que los distintos proveedores pueden implementar para brindar la cantidad de flexibilidad y rendimiento que necesite cada desarrollador en sus aplicaciones.

Page 11: Programacion orientada a objetos Java

Ingeniería de Software

La tecnología Java es una plataforma que se mantiene en continua expansión a través de diferentes API e infraestructuras de programación tales como Java Foundation Classes/Swing (J.F.C./Swing) y sus bibliotecas, la arquitectura de JavaBeans (arquitectura de componentes de Java) y el API JDBC (Java DataBase Connectivity). La lista de API de Java es larga y sigue en aumento.

Page 12: Programacion orientada a objetos Java

Ingeniería de Software

Fase de Análisis y Diseñoo Un proyecto de desarrollo de software se compone de cinco

fases fundamentales: definición de los requisitos, análisis, diseño, implementación y pruebas. Todas ellas son importantes, pero es fundamental dedicar el tiempo suficiente para las fases de análisis y diseño.

Page 13: Programacion orientada a objetos Java

Ingeniería de Software

Fase de Análisis y Diseñoo Durante la fase de análisis se define qué objetivos debe

perseguir el sistema. Esto se consigue definiendo todos los elementos implicados (usuarios, dispositivos y otros sistemas que interaccionan con el sistema propuesto) y las actividades que dicho sistema debe llevar a cabo. En esta fase se identifican también los objetos de dominio (tanto físicos como conceptuales) que el sistema propuesto manejará, así como el comportamiento de tales objetos y las interacciones entre ellos. Estos comportamientos implementan las actividades de las que el sistema propuesto debe hacerse cargo. La descripción de estas actividades debería ser lo bastante detallada como para crear los criterios que se tomarán como base en la fase de pruebas.

Page 14: Programacion orientada a objetos Java

Ingeniería de Software

Fase de Análisis y Diseñoo Durante la fase de diseño se define cómo alcanzará el sistema

esos objetivos. En esta fase se crea un modelo de los elementos implicados, las actividades, los objetos y los comportamientos del sistema propuesto. Para esta parte utilizará la herramienta de modelado UML (Unified Modeling Language).

Page 15: Programacion orientada a objetos Java

Ingeniería de Software

Ejemplo de Análisis y Diseñoo En este módulo se utiliza como ejemplo una aplicación de una

empresa de transporte. Deben tomarse en consideración un conjunto básico de requisitos:El software debe aplicarse a una sola compañía de transporte.La compañía cuenta con una flota de vehículos que transporta

cajas.El peso de las cajas es el único factor importante que debe

tenerse en cuenta al cargar un vehículo.La empresa posee dos tipos de vehículos: camiones y barcazas de

transporte fluvial.Las cajas se pesan utilizando el kilogramo como unidad de

medida, pero los algoritmos para calcular la potencia de motor necesaria deberá contabilizar la carga total del vehículo medida en newtons. Un newton es una medida de fuerza (o peso) equivalente a 9,8 veces la masa del objeto en kilogramos.

Page 16: Programacion orientada a objetos Java

Ingeniería de Software

Ejemplo de Análisis y DiseñoDeberá utilizar una interfaz gráfica para hacer el seguimiento de

las cajas que se van agregando a los vehículos. También deberá generar varios informes a partir de los registros

de fletes.o Tomando estos requisitos como base, puede crear un diseño de

alto nivel:Los objetos siguientes deben estar representados en el sistema:

una empresa y dos tipos de vehículos.Una compañía es la suma de múltiples objetos que son los

vehículos.También existen otros objetos funcionales: los informes y las

pantallas de la interfaz gráfica.

Page 17: Programacion orientada a objetos Java

Ingeniería de Software

Abstraccióno El diseño de software ha ido avanzado desde construcciones de

bajo nivel, como es la escritura en código máquina, hasta niveles mucho más altos.

o Existen dos fuerzas interrelacionadas que han impulsado este proceso: la simplificación y la abstracción.

Page 18: Programacion orientada a objetos Java

Ingeniería de Software

Abstraccióno La simplificación tuvo lugar cuando los primeros diseñadores de

lenguajes de programación crearon construcciones de alto nivel tales como las sentencias condicionales IF y los bucles FOR a partir del lenguaje de máquina.

o La abstracción es el mecanismo que oculta los datos privados de la implementación tras las interfaces públicas.

o El concepto de abstracción condujo al uso de subrutinas (funciones) en lenguajes de alto nivel y, posteriormente, al emparejamiento de funciones y datos en objetos. A niveles más altos, la abstracción dio lugar al desarrollo de infraestructuras de programación y API.

Page 19: Programacion orientada a objetos Java

Ingeniería de Software

Clases como prototipos de objetoso Al igual que un diseñador crea prototipos de dispositivos que

podrán utilizarse en repetidas ocasiones para construir los dispositivos reales, una clase es un prototipo de software que puede utilizarse para instanciar (es decir crear) muchos objetos diferentes. La clase define el conjunto de elementos (atributos) que definen los objetos, así como el conjunto de comportamientos o funciones (llamados métodos) que manejan el objeto o ejecutan las interacciones entre objetos relacionados. Juntos, los atributos y métodos se denominan miembros. Por ejemplo, un objeto vehículo en la aplicación de transporte debe llevar el control de su carga máxima y su carga real y utilizar métodos para agregar una caja (de un cierto peso) al vehículo. El lenguaje Java incorpora tres conceptos clave de la Programación Orientada a Objetos (POO): encapsulación, herencia y polimorfismo.

Page 20: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 21: Programacion orientada a objetos Java

Declaración de Clases en Java

La declaración de clases en Java adopta la forma siguiente:

o <nombre_clase> es el nombre de la clase que se va a declarar y puede ser cualquier identificador admitido.

o Hay varias palabras clave que pueden usarse como <modificador>, pero, por ahora, utilice únicamente public. Este modificador declara que la clase es pública, es decir, de acceso universal.

o El cuerpo de la clase declara el conjunto de atributos, constructores y métodos asociados a la clase.

<modificador>* class <nombre_clase> {<declaración_atributo>*<declaración_constructor>*<declaración_método>*}

Page 22: Programacion orientada a objetos Java

Declaración de Clases en Java

Ejemplo de declaración de una clase

public class Vehiculo {private double cargaMax;public void setCargaMax(double valor) {

cargaMax = valor; }}

Page 23: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 24: Programacion orientada a objetos Java

Declaración de Atributos

La declaración de atributos de los objetos se realiza de la forma siguiente:

o <nombre> es el nombre del atributo que se va a declarar y puede ser cualquier identificador admitido.

o Es posible usar varios valores como <modificador>, pero, por ahora, utilice sólo public o private. La clave private indica que sólo pueden acceder al atributo todos los métodos pertenecientes a esta clase.

o El <tipo> de atributo puede ser cualquier tipo primitivo (int, loat, etc.) o cualquier clase.

<modificador>* <tipo> <nombre> [= <valor_inicial>];

Page 25: Programacion orientada a objetos Java

Declaración de Atributos

Ejemplo:

public class Ejemplo {private int x;private float y = 10000.0F;private String name = "Hotel Mediodía"; }

Page 26: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 27: Programacion orientada a objetos Java

Declaración de Métodos

Para definir los métodos, el lenguaje Java utiliza un enfoque similar al de otros lenguajes, en concreto C y C++. La declaración adopta el siguiente formato básico:

o El <nombre> puede ser cualquier identificador admitido, con algunas restricciones derivadas de los nombres que ya se están utilizando.

o El segmento <modificador> es opcional y puede tener numerosos valores, entre ellos, public, protected y private. El modificador de acceso public indica que es posible llamar a este método desde otro código. El método private indica que sólo pueden acceder a él otros métodos de la clase. El método protected se describe más adelante en este curso.

<modificador>* <tipo retorno> <nombre> (<argumento>*){}

Page 28: Programacion orientada a objetos Java

Declaración de Métodos

o <tipo_retorno> indica el tipo de valor que devuelve el método. Si el método no devuelve ningún valor, debe declararse void. La tecnología Java es estricta en lo que se refiere a los valores de retorno. Si la declaración indica que el método debe devolver, por ejemplo, un entero (int), el método debe devolver un entero desde todas las rutas de retorno posibles y sólo acepta llamadas en contextos que esperen el tipo int. Para devolver un valor dentro de un método debe utilizarse la sentencia return.

o La lista <argumentos> permite pasar argumentos al método. Los elementos de la lista deben ir separados por comas y cada elemento debe constar de un tipo y un identificador.

Page 29: Programacion orientada a objetos Java

Declaración de Métodos

Ejemplo

public class Perro {private int peso;public int getPeso() {

return peso; }public void setPeso(int newPeso) {

if ( newPeso > 0 ) { peso = newPeso;

} } }

Page 30: Programacion orientada a objetos Java

Declaración de Métodos

El código muestra dos métodos para la clase Perro. o El método getPeso devuelve el valor del atributo peso y no

utiliza parámetros. Los valores de los métodos se devuelven utilizando la sentencia return.

o El método setPeso modifica el valor de peso con el parámetro newPeso. No devuelve ningún valor. Este método utiliza una sentencia condicional para impedir que el código cliente defina el peso de Perro con un número negativo o con cero.

Page 31: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 32: Programacion orientada a objetos Java

Acceso a los miembros del objeto

En el ejemplo siguiente verá la siguiente línea de código en el método Prueba Perro.main:

Esta línea indica al objeto d (en realidad una variable, d, que contiene una referencia a un objeto del tipo Perro) que ejecute su método setPeso. Esto se denomina notación de punto.

El operador punto (.) permite acceder a los atributos y métodos que componen los miembros no privados de una clase.

Dentro de la definición de los métodos, no es necesario usar la notación de punto para acceder a los miembros locales. Por ejemplo, el método setPeso de la clase Perro no utiliza la notación de punto para acceder al atributo peso.

d.setPeso(42);

Page 33: Programacion orientada a objetos Java

Acceso a los miembros del objeto

En el Código se muestra el comportamiento de los métodos de Perro. Cuando se crea el objeto Perro, se inicializa la variable de la instancia peso con el valor 0. Por tanto, el método getPeso devuelve 0.

Asimismo en este código se establece el peso en 42, que es un argumento válido, y el método setPeso define el valor de la variable peso.

No obstante, no se admite el valor -42 como peso, así que el método setPeso no modifica la variable peso.

Page 34: Programacion orientada a objetos Java

Acceso a los miembros del objeto

Ejemplo

public class PruebaPerro { public static void main(String[] args) {

Perro d = new Perro();System.out.println("El peso del perro d es + d.getPeso()); d.setPeso(42);

System.out.println("El peso del perro d es “ + d.getPeso()); d.setPeso(-42); System.out.println("El peso del perro d es “ + d.getPeso());

} }

La salida es:El peso del perro d es 0El peso del perro d es 42El peso del perro d es 42

Page 35: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 36: Programacion orientada a objetos Java

Forma de ocultar la información

Imagine que tiene una clase llamada MyDate que incluye los atributos siguientes: day, month y year. La Figura contiene un diagrama de una posible implementación de la clase MyDate.

Una implementación sencilla permite el acceso directo a estos atributos, por ejemplo:

public class MyDate { public int day; public int month; public int year;}

Page 37: Programacion orientada a objetos Java

Forma de ocultar la información

Por tanto, el código cliente accede directamente a estos atributos y genera errores, por ejemplo (d se refiere al objeto MyDate):

d.day = 32;// día no válido

d.month = 2; d.day = 30;// posible pero incorrecto, 30 de febrero

d.day = d.day + 1;// no hay comprobación de comportamiento cíclico (wraparound)

Page 38: Programacion orientada a objetos Java

Forma de ocultar la información

Para resolver el problema, oculte los datos de atributos haciéndolos privados y proporcione otros métodos de acceso como getXyz(), a veces denominados getters, y setXyz(), a veces llamados setters. En la siguiente Figura se ilustra otro diagrama UML de la clase MyDate donde se ocultan las variables de instancia detrás de los métodos de acceso get y set.

Page 39: Programacion orientada a objetos Java

Forma de ocultar la información

Forma de ocultar las variables de instancia de la clase MyDate

Page 40: Programacion orientada a objetos Java

Forma de ocultar la información

Estos métodos permiten a la clase modificar los datos internos, pero, sobre todo, verificar la validez de los cambios solicitados. Por ejemplo:

MyDate d = new MyDate();

d.setDay(32);// día no válido, devuelve false

d.setMonth(2); d.setDay(30);// posible pero incorrecto, setDay devuelve false

d.setDay(d.getDay() + 1);// esta línea devuelve false si se produce comportamiento cíclico

Page 41: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 42: Programacion orientada a objetos Java

Encapsulación

La encapsulación es la forma de ocultar ciertos elementos de la implementación de una clase y, al mismo tiempo, proporcionar una interfaz pública para el software cliente. Es una forma más de ocultar los datos, ya que la información de los atributos es un elemento significativo de la implementación de las clases.

Por ejemplo, el programador de la clase MyDate podría optar por volver a implementar la representación interna de una fecha como el número de días transcurridos desde el comienzo de una determinada época. Esto podría facilitar las comparaciones de fechas y el cálculo de los intervalos entre fechas. Como el programador ha encapsulado los atributos dentro de una interfaz pública, puede realizar este cambio sin que afecte al código cliente.

Page 43: Programacion orientada a objetos Java

Encapsulación

La encapsulación aporta mayor flexibilidad para representar los datos.

Page 44: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

1. Ingeniería de Software2. Declaración de Clases en Java3. Declaración de Atributos4. Declaración de Métodos5. Acceso a los miembros del objeto6. Forma de ocultar la información7. Encapsulación8. Declaración de Constructores

Page 45: Programacion orientada a objetos Java

Declaración de Constructores

Un constructor es un conjunto de instrucciones diseñadas para inicializar una instancia. Los parámetros del constructor se pasan de la misma forma que los de los métodos. La declaración básica tiene el siguiente formato:

El nombre del constructor siempre debe ser idéntico al de la clase. Si se utilizan, los únicos modificadores válidos (<modificador>) para los constructores son public, protected y private.

La lista de <argumentos> es la misma que en el caso de las declaraciones de métodos.

[<modificador>] <nombre_clase> ( <argumentos>* ) {<sentencia>*}

Page 46: Programacion orientada a objetos Java

Declaración de Constructores

Los constructores no son métodos. No tienen valores de retorno ni se heredan.

La clase Perro tiene una sola variable de instancia peso. El constructor(sin parámetros) inicializa peso con el valor 42. También es posible declarar constructores con parámetros. Este aspecto se trata más adelante en el curso.

public class Perro { private int peso;

public Perro() { peso = 42;

}}

Page 47: Programacion orientada a objetos Java

Declaración de Constructores

Constructor Predeterminadoo Cada clase tiene al menos un constructor. Si no se escribe

ninguno, el lenguaje Java se encarga de suministrarlo. En ese caso, el constructor no tiene argumentos y su cuerpo está vacío.

o El constructor predeterminado permite crear instancias de los objetos con new Xyz(). En caso de que no se utilice, es preciso suministrar un constructor para cada clase.

o Si se agrega la declaración de un constructor a una clase que no tenía ningún constructor explícito, se pierde el constructor predeterminado. A partir de ese momento, y a menos que el constructor agregado no tenga argumentos, las llamadas a new Xyz() generarán errores de compilación.

Page 48: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 49: Programacion orientada a objetos Java

Organización de los archivos fuentes

Los archivos fuente de Java tienen el siguiente formato:

El signo más (+) indica uno o más. Para que pueda utilizarse, un archivo fuente debe contener al menos la definición de una clase.

[<declaración_paquete>]<declaración_importación>*<declaración_clase>+

Page 50: Programacion orientada a objetos Java

Organización de los archivos fuentes

El orden de estos elementos es importante. Es decir, las sentencias de importación deben preceder a las declaraciones de clases y, si se utiliza una declaración de paquetes, ésta debe preceder a la de clases e importaciones.

El nombre del archivo fuente debe ser el mismo que el de la declaración de clase pública de ese archivo.

Por otra parte, el archivo fuente puede incluir varias declaraciones de clases, pero sólo una puede declararse como pública (public). Si un archivo fuente no contiene ninguna declaración de clase pública, entonces no existen restricciones en cuanto al nombre de archivo. No obstante, es recomendable tener un archivo fuente por cada declaración de clase y el nombre de dicho archivo debe ser idéntico al de la clase.

Page 51: Programacion orientada a objetos Java

Organización de los archivos fuentes

Por ejemplo, el archivo InformeCapacidadVehiculo.java debería tener un contenido similar a éste:

package transporte.informes;

import transporte.dominio.*;import java.util.List;import java.io.*;

public class InformeCapacidadVehiculo { private List vehiculos; public void generarInforme(Writer output) {

// código para generar el informe } }

Page 52: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 53: Programacion orientada a objetos Java

Paquetes de Software

La mayoría de los sistemas de software son de grandes dimensiones. Es habitual agrupar las clases en paquetes para facilitar la administración del sistema. UML incluye el concepto de paquete en su lenguaje de modelado. Los paquetes pueden contener clases u otros paquetes que forman una jerarquía. En la Figura puede verse un ejemplo de una estructura de paquetes:

Page 54: Programacion orientada a objetos Java

Paquetes de Software

Existen muchas formas de agrupar las clases en paquetes con sentido lógico. No existe una forma correcta o errónea de hacerlo, pero una técnica habitual es agrupar las clases por similitud semántica.

Por ejemplo, un sistema de software de transporte debería contener una serie de objetos de dominio (como la empresa, los vehículos, las cajas, los destinos, etc.), un conjunto de informes y un grupo de paneles de la interfaz gráfica que sirvan para crear la aplicación de introducción de datos principal. Los subsistemas GUI e informes dependen del paquete dominio. Los paquetes UML pueden ser útiles para modelar subsistemas u otras agrupaciones de elementos en función de las necesidades. Los demás paquetes están incluidos en el paquete de nivel superior, llamado transporte.

Page 55: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 56: Programacion orientada a objetos Java

Sentencia package

El lenguaje Java proporciona la sentencia package como una forma de agrupar clases relacionadas. Esta sentencia se utiliza con la siguiente sintaxis:

Es posible indicar que las clases de un archivo fuente pertenecen a un determinado paquete utilizando la sentencia package, por ejemplo:

package <nombre_paq_superior>[.<nombre_paq_subordinado>]*;

package transporte.dominio; // Clase Vehiculo del subpaquete ’dominio’ que hay dentro del // paquete ’transporte’.public class Vehiculo { ... }

Page 57: Programacion orientada a objetos Java

Sentencia package

La declaración de paquetes, si existe, debe situarse al comienzo del archivo fuente. Puede ir precedida de un espacio en blanco y comentarios, pero nada más. Sólo se permite una declaración de paquetes, que será la que gobierne todo el archivo fuente. Si un archivo fuente Java no contiene ninguna declaración de paquete, las clases declaradas en el archivo pertenecerán al paquete predeterminado (sin nombre).

Page 58: Programacion orientada a objetos Java

Sentencia package

Los nombres de paquetes forman una jerarquía y se separan mediante puntos. Lo normal es que los elementos de estos nombres se escriban enteramente en minúsculas. Sin embargo, el nombre de las clases suele empezar por una letra mayúscula y se escribe en mayúscula la primera letra de cada palabra que se agrega a fin de diferenciar las distintas palabras dentro del nombre de clase. Éstas y otras convenciones sobre la nomenclatura se explican en ‘‘Convenciones de codificación en el lenguaje Java“.

Si no se incluye ninguna sentencia package en el archivo, todas las clases declaradas en ese archivo pertenecen al paquete predeterminado(que es un paquete sin nombre).

Page 59: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 60: Programacion orientada a objetos Java

Sentencia import

Esta sentencia tiene la siguiente sintaxis:

Cuando vaya a utilizar paquetes, use la sentencia import para indicar al compilador el lugar donde se encuentran las clases. De hecho, el nombre del paquete (por ejemplo, transporte.dominio) forma parte del nombre de las clases contenidas en ese paquete. Así, puede referirse a la clase Empresa como transporte.dominio.Empresa en todo el archivo, o bien utilizar la sentencia import junto con el nombre de la clase Empresa.

import <nombre_paq>[.<nombre_paq_subordinado>].<nombre_clase>;o bienimport <nombre_paq>[.<nombre_paq_subordinado>].*;

Page 61: Programacion orientada a objetos Java

Sentencia import

Las sentencias import deben preceder a cualquier declaración de clase del archivo.

En el ejemplo siguiente se muestra un fragmento de archivo donde se utiliza la sentencia import.

package transporte.informes;

import transporte.dominio.*;import java.util.List; import java.io.*;

public class InformeCapacidadVehiculo { private Empresa empresaParaInforme; ... }

Page 62: Programacion orientada a objetos Java

Sentencia import

Cuando se declara un paquete, no es necesario importar el paquete en sí, ni ninguno de los elementos que contiene. Recuerde que la sentencia import se utiliza para poner las clases de otros paquetes a disposición de la clase actual.

import indica la clase a la que se quiere acceder. Por ejemplo, si sólo quiere incluir la clase Writer (del paquete java.io) en el espacio de nombres actual, utilizará:

Si quiere acceso a todas las clases del paquete, utilice el asterisco “*”. Por ejemplo, para acceder a todas las clases del paquete java.io, escriba:

import java.io.Writer;

import java.io.*;

Page 63: Programacion orientada a objetos Java

Sentencia import

La sentencia import permite utilizar los nombres de clase en un formato abreviado dentro del código fuente, eso es todo. Este tipo de sentencias no hacen que el compilador cargue ningún dato adicional en la memoria de trabajo. En este sentido, import se diferencia bastante de la sentencia #include de C o C++. La sentencia import, con o sin carácter comodín (*), no tiene ningún efecto en el archivo de clase de salida, ni tampoco en el rendimiento del programa durante la ejecución.

Asimismo, es improbable que su uso provoque diferencias de rendimiento durante la compilación.

Page 64: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 65: Programacion orientada a objetos Java

Disposición de los directorios y los paquetes

Los paquetes se almacenan en un árbol de directorios cuyas ramas son los nombres de los paquetes. Por ejemplo, el archivo Empresa.class se encontrará en la estructura de directorios que aparece en la Figura.

Page 66: Programacion orientada a objetos Java

Disposición de los directorios y los paquetes

Desarrolloo Es habitual tener que trabajar en varios proyectos de desarrollo

al mismo tiempo. Existen muchas formas de organizar los archivos de desarrollo. En esta sección se describe una de ellas.

o En la Figura anterior puede verse un ejemplo de jerarquía de directorios creada para un proyecto de desarrollo. El aspecto fundamental de esta jerarquía es que los archivos fuente de cada proyecto están separados de los archivos compilados (.class).

Page 67: Programacion orientada a objetos Java

Disposición de los directorios y los paquetes

Desarrollo

Page 68: Programacion orientada a objetos Java

Disposición de los directorios y los paquetes

Compilación con la opción -do Normalmente, el compilador de Java sitúa los archivos de clases

en el mismo directorio que los archivos fuente. Es posible enviar los archivos de clases a otro directorio utilizando la opción -d del comando javac. La forma más sencilla de compilar los archivos de los paquetes es trabajar en el directorio situado un nivel por encima del comienzo del paquete (en este ejemplo, el directorio src).

o Para compilar todos los archivos del paquete transporte.dominio de forma que todas las clases compiladas vayan al directorio de paquete correcto dentro de TransporteProy/class/, escriba lo siguiente:

cd ProyectosJava/TransporteProy/srcjavac –d ../classes transporte/dominio/*.java

Page 69: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 70: Programacion orientada a objetos Java

Implementación

Implementacióno Es posible implementar una aplicación en una máquina cliente

sin modificar la variable de entorno CLASSPATH del usuario. Normalmente, la mejor forma de hacerlo es crear un archivo Java ejecutable (JAR). Para crear este archivo, debe crear un archivo temporal donde se indique el nombre de la clase que contiene el método main necesario para la ejecución, por ejemplo:

Main-Class: mipaquete.MiClase

Page 71: Programacion orientada a objetos Java

Implementación

Implementacióno A continuación, cree el archivo JAR de la forma habitual,

aunque deberá agregar una opción para que el contenido del archivo temporal se copie en el archivo META-INF/MANIFEST.MF. Para ello, utilice la opción “m”, como en este ejemplo:

jar cmf tempfile MiPrograma.jar

Page 72: Programacion orientada a objetos Java

Implementación

Implementacióno Por último, el programa puede ejecutarse simplemente con un

comando como éste:

o En algunas plataformas, basta hacer doble clic en el icono de un archivo JAR ejecutable para que se inicie el programa correspondiente.

java -jar /ruta/al/archivo/MiPrograma.jar

Page 73: Programacion orientada a objetos Java

Implementación

Implementación de las bibliotecaso Algunas veces es necesario implementar el código de las

bibliotecas en un archivo JAR. En tales casos, es posible copiar el archivo JAR en el subdirectorio ext del directorio lib situado bajo el directorio principal del JRE. Actúe con precaución al hacerlo porque, si implementa las clases de esta forma, normalmente reciben privilegios de seguridad completos.

o Esto puede ocasionar problemas durante la ejecución del programa en el caso de que existan conflictos de nombres con otras clases del núcleo del JDK u otras clases que se hayan instalado de esa misma forma.

Page 74: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 75: Programacion orientada a objetos Java

Cont

enid

osActividad 2: Programación orientada a objetos

9. Organización de los archivos fuentes10. Paquetes de Software11. Sentencia package12. Sentencia import13. Disposición de los directorios y los paquetes14. Implementación15. Resumen de la terminología16. Uso de la documentación sobre el API de Java

Page 76: Programacion orientada a objetos Java

Uso de la documentación sobre el API de Java

Existen diferentes archivos en formato HTML que sirven de documentación sobre el API suministrado. La organización de estos documentos es jerárquica, de modo que la página inicial muestra la lista de todos los paquetes en forma de hipervínculos. Cuando seleccione el vínculo de un determinado paquete, aparecerá la lista de todas las clases que contiene ese paquete. Si selecciona el vínculo de una clase, se abrirá una página con información sobre esa clase. En la Figura se muestra una de las clases.

Page 77: Programacion orientada a objetos Java

Uso de la documentación sobre el API de Java

Page 78: Programacion orientada a objetos Java

Uso de la documentación sobre el API de Java

Los documentos de las clases contienen las secciones siguientes:

o La jerarquía de la claseo Una descripción de la clase y su propósitoo La lista de atributoso La lista de constructoreso La lista de métodoso Una lista detallada de atributos con sus descripcioneso Una lista detallada de constructores con sus descripciones y las

listas de parámetros formaleso Una lista detallada de métodos con sus descripciones y las listas

de parámetros formales

Page 79: Programacion orientada a objetos Java

TAREA Investiga el concepto de las siguientes palabras en 03 líneas y

lo presentas en PowerPoint

oClase: oObjeto: oAtributo: oMétodo:oConstructor: oPaquete: