buscador

Visita

Mostrando las entradas con la etiqueta Abstracci贸n. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Abstracci贸n. Mostrar todas las entradas

martes, 8 de febrero de 2022

✅ Actividad 02 : Programaci贸n orientada a objetos con 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 del autor.
脥ndice del Capitulo

  • Ingenier铆a de Software
  • Declaraci贸n de Clases en Java
  • Declaraci贸n de Atributos
  • Declaraci贸n de M茅todos
  • Acceso a los miembros del objeto
  • Forma de ocultar la informaci贸n
  • Encapsulaci贸n
  • Declaraci贸n de Constructores
  • Organizaci贸n de los archivos fuentes
  • Paquetes de Software
  • Sentencia package
  • Sentencia import
  • Disposici贸n de los directorios y los paquetes
  • Implementaci贸n
  • Uso de la documentaci贸n sobre el API de Java

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 mas sencillos mediante el uso de c贸digo reutilizable. En la siguiente figura se ofrece una breve historia de la ingenier铆a de software.
Breve historia de la 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 carga estructurales para ingenier铆a (NASTRAN), hasta la transmisi贸n de caracteres y flujos de bytes entre 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).

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 registro 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.

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 afecten 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.


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 necesita cada desarrollador en sus aplicaciones. 

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.

Fase de An谩lisis y Dise帽o
Fase de An谩lisis
Durante la fase de an谩lisis se define que objetivos debe perseguir el sistema. Esto se consigue definiendo todos los elementos implicados (usuario, 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 objetivos de dominio (tanto f铆sicos como conceptuales) que el sistema propuesto manejar谩, asi 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 tomaran como base en la fase de pruebas.

Fase de Dise帽o
Durante la fase de dise帽o se define como alcanzara 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 modela UML (Unified Modeling Language).

Ejemplo de An谩lisis y Dise帽o
En este modulo se utilizara como ejemplo una aplicaci贸n de una empresa de transporte. deben tomarse en consideraci贸n un conjunto b谩sicos 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 pose 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.
  • Deber谩 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.
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.
El dise帽o de software ha ido avanzando desde construcciones de bajo nivel, como es la escritura en c贸digo m谩quina, hasta niveles muchos mas altos.
Existen dos fuerzas interrelacionadas que han impulsado este proceso: La simplificaci贸n y La abstracci贸n.

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 maquina

La Abstracci贸n es el mecanismo que oculta los datos privados de la implementaci贸n tras las interfaces publicas. El concepto de abstracci贸n condujo al uso de subrutinas (Funciones) en el lenguaje 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.

Clases como prototipos de objetos
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, asi 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): encapsulamiento, herencia y polimorfismo.

Encapsulamiento

Es la caracter铆stica de la POO que permite el ocultamiento de la complejidad del c贸digo, pertenece a la parte privada de la clase y que no puede ser vista desde ning煤n otro programa.

En el gr谩fico se representa como la complejidad del c贸digo queda oculta dentro de una caja fuerte impidiendo que quien lo utilice sin observar los detalles de cada una de las l铆neas que permiten el cumplimiento de una acci贸n espec铆fica.

En realidad, el encapsulamiento est谩 relacionado con el acceso a un c贸digo desde el c贸digo de otra clase; sin embargo en t茅rminos generales, esta representaci贸n gr谩fica es conveniente para comprender el concepto de encapsulamiento. Fuente: Pilares del fundamento de Programaci贸n

Herencia 
Es el pilar m谩s fuerte que asegura la reutilizaci贸n de c贸digo, ya que a partir de esta caracter铆stica es posible reutilizar (heredar) las caracter铆sticas y comportamientos de una clase superior llamada clase padre, a sus clases hijas, denominadas clases derivadas. Esto implica que una vez desarrollado el c贸digo de una clase base, su c贸digo puede ser reutilizado por las clases derivadas.
En el gr谩fico, Persona es la clase Padre, que tiene como caracter铆sticas: CI, nombre, direcci贸n, fechaNac, genero, entre otros; y Estudiante y Profesor son las clases "Hijas", que heredan las caracter铆sticas de la clase padre y a su vez establecen las propias de su clase.  Esto implica que no se deber谩n volver a definir, sino que por el simple hecho de heredarlas ya es posible utilizarlas y en el caso de los comportamientos ejecutarlos o modificarlos si es necesario.

Polimorfismo
A trav茅s de esta caracter铆stica es posible definir varios m茅todos o comportamientos de un objeto bajo un mismo nombre, de forma tal que es posible modificar los par谩metros del m茅todo, o reescribir su funcionamiento, o incrementar m谩s funcionalidades a un m茅todo.
En el gr谩fico se observa que todas son figuras geom茅tricas por lo que pueden incluirse en una clase Padre, por lo que la clase deber谩 tener el m茅todo 脕rea(), este m茅todo podr谩 ser reescrito tantas veces como figuras existan, con los par谩metros correspondientes en cada clase derivada: Circulo, Triangulo y Rect谩ngulo, o reescrita en la clase base.

Declaraci贸n de Clases en Java
La declaraci贸n de clases en Java adopta la siguiente forma:
» <nombre_clase> es el nombre de la clase que se va a declarar y puede ser cualquier identificador admitido.
» Hay varias palabras clave que pueden usarse como <modificador>, pero, por ahora, utilice 煤nicamente public. Este modificador declara que la clase es publica, es decir, de acceso universal.
»  El cuerpo de la clase declara el conjunto de atributos, constructores y m茅todos asociados a la clase.

Ejemplo de declaraci贸n de una clase:

Declaraci贸n de Atributos
» La declaraci贸n de atributos de los objetos se realiza de la siguiente forma:
                        <modificador>* <tipo> <nombre>[=<valor_inicial>];
»<nombre> es el nombre del atributo que se va a declarar y puede ser cualquier identificador admitido.
» 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.
» El  <tipo> de atributo puede ser cualquier tipo primitivo (int, string,etc) o cualquier otra clase.

Ejemplo de declaraci贸n de atributos
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:
<modificador>* <tipo retorno> <nombre> (<argumento>*){}  
» El <nombre> puede ser cualquier identificador admitido, con algunas restricciones derivadas de los nombres que ya se est谩n utilizando.
» 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.
»<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 posible y solo acepta llamadas en contextos que se esperen en tipo int. Para devolver un valor dentro de un m茅todo debe utilizarse la sentencia return
La lista <argumento> 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.

Ejemplo de declaraci贸n de un m茅todo.
El c贸digo muestra dos m茅todos para la clase Perro.
» 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.
» El m茅todo setPeso modifica el valor de peso con el par谩metro newPeso. No devuelve ningun 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.

Acceso a los miembros del objeto
En el ejemplo siguiente ver谩 la siguiente line谩 de c贸digo en el m茅todo Prueba Perro.main:
                                                                    d.setPeso(42);
Esta linea 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.
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 valido, y el m茅todo setPeso define el valor de la variable peso.
No obstante, no se admite el valor -42 como peso, asi que el m茅todo setPeso no modifica la variable peso.

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:
    

Por tanto, el c贸digo cliente accede directamente a estos atributos y genera errores, por ejemplo (d se refiere al objeto MyDate):
Para resolver el problema, oculte los datos de atributos haci茅ndolos privados y proporcione otros m茅todos de acceso como getXyz(), z 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.

Estos m茅todos permiten a la clase modificar los datos internos, pero, sobre todo, verificar la validez de los cambios solicitados. Por ejemplo:
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 publica para el software cliente. Es una forma mas 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 dias transcurridos desde el comienzo de una determinada 茅poca. Esto podr铆a facilitar las comparaciones de fechas y el calculo de los intervalos entre fechas. Como el programador ha encapsulado los atributos dentro de una interfaz publica, puede realizar este cambio sin que afecte al c贸digo cliente.
La encapsulaci贸n aporta mayor flexibilidad para representar los datos.


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:
[<modificador>] <nombre_clase>(<argumento>*){
<sentencia>*
}
El nombre del constructor siempre debe ser id茅ntico al de la clase. Si se utilizan, los unicos modificadores validos 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.

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.

Constructor Predeterminado
Cada clase tiene al menos un constructor. si no se escribe ninguno, el lenguaje de Java se encarga de suministrarlo. En ese caso, el constructor no tiene argumentos y su cuerpo esta vac铆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.
Si se agrega la declaraci贸n de un constructor a una clase que no tenia ning煤n constructor explicito, 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() generan errores de compilaci贸n.

Organizaci贸n de los archivos fuentes
Los archivos fuentes de Java tienen el siguiente formato:
[<declaraci贸n_paquete>]
<declaraci贸n_importaci贸n>*
<declraci贸n_clase>+
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.
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, esta 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 publica de este archivo.
Por otra parte, el archivo fuente puede incluir varias declaraciones de clases, pero solo una puede declararse como publica (public). Si un archivo fuente no contiene ninguna declaraci贸n de clase publica, 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.

Por ejemplo, el archivo Informe CapacidadVehiculo.java deber铆a tener un contenido similar a este:


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:
Existe 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 grafica 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.

Sentencia package

El lenguaje java proporciona sentencia package como una forma de agrupar clases relacionadas. Esta sentencia se utiliza con la siguiente sintaxis:
                                package <nombre_paq_superior>[.<nombre_paq_subordinado>]*;
Es posible indicar que las clases de un archivo fuente pertenecen aun determinado paquete utilizando la sentencia package, por ejemplo:
                    package transporte.dominio;
                    //clase vehiculo del subpaquete "dominio" que hay dentro del paquete "transporte".
                    public class Vehiculo {
                    ..............................
                    }

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. Solo se permite una declaraci贸n de paquetes, que ser谩 la que gobierna 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).
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 suelen empezar por una letra may煤scula y se escribe en may煤scula la primera letra de cada palabras que se agrega a fin de diferenciar las distintas palabras dentro del nombre de clase. Estas y otras palabras convencionales sobre la nomenclatura se explican en  "Convenciones de codificadores en el lenguaje Java".
Si no se incluye ninguna sentencia package en el archivo, todas las clases declaradas en este archivo pertenecen al paquete predeterminado (que es un paquete sin nombre)

Sentencia import
Esta sentencia tiene la siguiente sintaxis:
                             import <nombre_paq>[.<nombre_paq_subordinado>].<nombre_clase>;
O bien
                             import <nombre_paq>[.<nombre_paq_subordinado>].*;
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.

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.

Cuando se declara un paquete, no es necesario importar el paquete en si, ni ninguno de los elementos que contiene. 
Recuerde que la sentencia import se utiliza para poner las clases de otros paquetes a disposicion de la clase actual. 
Import indica la clase a la que que se quiere acceder. Por ejemplo, si solo quiere incluir la clase Writer (del paquete java.io) en el espacio de nombres actual, utilizar谩:
            import java.io.Writer;
Si quiere acceso a todas las clases utilice asterisco "*". Por ejemplo, para acceder a todas las clases del paquete java.io, escriba:
            import java.io.*;
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 caracter comodin (*), 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.

Disposiciones 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.
Desarrollo
○ 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.
○En la figura anterior puede verse un ejemplo de jerarquia 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).


Compilaci贸n con la opci贸n - d
○ Normalmente, el compilador de Java situ谩 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).

○ 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 ProyectoJava/TransporteProy/src
                                             javac -d ..../classes transporte/dominio/*.java

Implementaci贸n 
Es posible implementar una aplicaci贸n en una maquina 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
○ 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 este ejemplo: 
                                                jar cmf tempfile MiPrograma.jar
○ Por 煤ltimo, el programa puede ejecutarse simplemente con un comando como este:
                                                java -jar /ruta/al/archivo/MiPrograma.jar
En algunas plataformas, basta hacer doble clic en el icono de un archivo JAR ejecutable para se inicie el programa correspondiente.

Implementaci贸n de las bibliotecas
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. Actu茅 con precauci贸n al hacerlo porque, si implementar las clases de esta forma, normalmente reciben privilegios de seguridad completos.
Esto puede ocasionar problemas durante la ejecuci贸n del programa en el caso de que existen conflictos de nombres del n煤cleo del JDK u otras clases que se hayan instalado de esa misma forma.

Resumen de la Terminolog铆a
A continuaci贸n se definen algunos de los t茅rminos presentados en este modulo:
Clase : forma de definir nuevos tipos de objetos en el lenguaje de programaci贸n Java, La clase puede considerarse como un prototipo, un modelo de objetos que se est谩 describiendo.
Objeto : instancia (ejemplar) creada a partir de una clase. Un objeto es lo que se obtiene cada vez que se genera una instancia de una clase utilizando new. Los objetos tambi茅n se conocen como instancias.
Atributo : elemento que suministra datos sobre un objeto. Los atributos almacenan informaci贸n relativa a los objetos. Los atributos tambi茅n se conocen como miembros dato, variables de instancia o campos de datos.
M茅todo : elemento funcional de un objeto. los m茅todos tambi茅n se conocen como funciones o procedimientos.
Constructor : elemento similar al m茅todo utilizado para inicializar(o crear) un objeto nuevo. Los constructores tienen el mismo nombre que la clase.
Paquete : grupo de clases, subpaquetes o una combinaci贸n de ambos.

Uso de la documentaci贸n sobre el API de Java
Existen diferentes archivos en formato HTML que sirve de documentaci贸n sobre el API suministrado. La organizaci贸n de estos documentos es jer谩rquica, de modo que la pagina inicial muestre la lista de todos los paquetes en forma de hiperv铆nculos. Cuando seleccione el vinculo de un determinado paquete, aparecer谩 la lista de todas las clases que contiene ese paquete. Si selecciona el vinculo de una clase, se abrir谩 una pagina con informaci贸n sobre esa clase. 

Ejemplo de Paginas de documentaci贸n sobre el API de Java
Uso de la documentaci贸n sobre el API de Java
» Los documentos de las clases contienen las secciones siguientes: 
○ La jerarqu铆a de la clase
○ Una descripci贸n de la clase y su prop贸sito
○ La lista de atributos
○ La lista de constructores
○ La lista de m茅todos
○ Una lista detallada de atributos con sus descripciones
○ una lista detallada de constructores con sus descripciones y las listas de par谩metros formales.
○ Una  lista detallada de m茅todos con sus descripciones y las listas de par谩metros formales.

martes, 12 de julio de 2016

馃搷Actividad 11: Implementaci贸n 馃懆‍馃捇 de la Herencia en Java ☕️

Bienvenido al Blog, en esta oportunidad desarrollaremos un tema Te贸rico Practico sobre programaci贸n orientado a objetos, para entender sobre c贸mo desarrollar un sistema con el lenguaje java veremos acerca de  Implementaci贸n 馃懆‍馃捇 de la Herencia    en ☕️ Java.

 Sobre el contenido …

  •     El contenido de este blog tiene como fuente el curso Fundamentos de programaci贸n de Oracle.
  •      Con algunos agregados del autor "EL INFORMATICO IBERO"馃懛
Indice :

  • Herencia
  • Abstracci贸n
  • Clases del API de Java

Herencia

Caso de estudio

  • Utilizaremos el siguiente caso para ilustrar conceptos intermedios del an谩lisis y el dise帽o OO.
  • El m谩ximo responsable de DirectClothing, Inc. ha decidido que la compa帽铆a ampl铆e su l铆nea de productos para incluir gorros, calcetines y pantalones.  La decisi贸n le lleva a darse cuenta de que necesitar谩 cambiar el sistema de introducci贸n de pedidos previamente desarrollado. Como consecuencia, DirectClothing le ha contratado para poner al d铆a el citado sistema de forma que incorpore estos tipos de productos.
  • A fin de poder desarrollar las clases necesarias para hacer la actualizaci贸n, deber谩 realizar un breve an谩lisis del nuevo sistema y determinar que los gorros, los calcetines y los pantalones son los 煤nicos objetos nuevos que van a introducirse (en el dominio del problema). Adem谩s recibe la siguiente informaci贸n:
    • S贸lo se vender谩n gorros y calcetines de talla 煤nica.
    • Los modelos de pantalones ser谩n distintos para hombres y mujeres.
    • Los pantalones se vender谩n en colores azul y tostado, mientras que los gorros, los calcetines y las camisas se vender谩n en rojo, azul y verde.

A continuaci贸n, deber谩 dise帽ar el nuevo sistema modelando las clases que se utilizar谩n para crear estos objetos. En las dos figuras siguientes se ilustran las nuevas clases y la clase Shirt previamente definida.

Estas nuevas clases tienen muchas de las caracter铆sticas de la clase Shirt. Por ejemplo, todas tienen ID, precios y descripciones. Todas tienen operaciones para calcular un ID y mostrar los datos. Sin embargo, el m茅todo de salida a la pantalla de cada subclase presenta diferente contenido.

Es posible eliminar la necesidad de duplicar esta informaci贸n en cada clase implementando un concepto de la programaci贸n OO denominado herencia.

Superclases y subclases

  • La herencia permite a los programadores poner miembros comunes (variables y m茅todos) en una clase y hacer que otras clases hereden esos miembros comunes.
  • La clase que contiene miembros comunes a otras clases se denomina superclase o clase de nivel superior.
  • Las clases que heredan miembros de la superclase se denominan subclases o clases subordinadas.
  • La herencia da como resultado una jerarqu铆a de clases de la tecnolog铆a Java similar a la clasificaci贸n taxon贸mica que se utiliza en biolog铆a, por ejemplo, “La ballena azul es una subclase de la ballena”.

Superclases y subclases

En la figura siguiente se ilustra una jerarqu铆a de ballenas.

“Sangre caliente” es un atributo de la superclase mam铆feros. La frase “respira aire” representa una actividad que tambi茅n forma parte de la superclase mam铆feros. La cola y las aletas son atributos espec铆ficos de las ballenas, que es una subclase de los mam铆feros.

Comprobaci贸n de las relaciones entre superclases y subclases

En el lenguaje Java, cada clase puede heredar miembros de una sola clase, por lo que es muy importante sopesar la mejor forma de usar la herencia y utilizarla s贸lo cuando sea completamente v谩lida o inevitable.

Algunos lenguajes de programaci贸n, como C++, permiten a una clase heredar de diferentes superclases. Este concepto se denomina herencia m煤ltiple. El lenguaje Java no admite la herencia m煤ltiple porque su implementaci贸n puede resultar confusa para los programadores. En su lugar, el lenguaje Java utiliza el concepto de interfaz.

La forma de comprobar si un v铆nculo de herencia propuesto es v谩lido es utilizar la expresi贸n “es un/una”. La frase “una Camisa es una Prenda de vestir” expresa un v铆nculo de herencia v谩lido. La frase “un Gorro es un Calcet铆n” expresa un v铆nculo de herencia incorrecto.

En el caso estudiado, camisas, pantalones, gorros y calcetines son tipos de prendas de vestir. Por tanto, Prendas es un buen nombre para la superclase de estas subclases (tipos) de prendas de vestir.

Modelado de las superclases y subclases

Despu茅s de identificar la relaci贸n entre la superclase y las subclases, puede remodelar todas sus clases. Las subclases s贸lo contendr谩n caracter铆sticas propias de ellas mismas.

En las tres figuras siguientes se muestran las nuevas clases, la clase Shirt definida anteriormente y la superclase Clothing.


Las caracter铆sticas comunes a todas las subclases est谩n en la superclase Clothing.

Declaraci贸n de una superclase

Los siguientes ejemplos de c贸digo contienen una superclase Clothing. La clase Clothing contiene los m茅todos utilizados por todas las subclases, por ejemplo las clases Shirt o Pants. Cada subclase heredar谩 estos m茅todos.


Utilice la palabra clave extends para indicar que una clase hereda miembros de otra clase. Para indicar que una clase es una subclase de otra, utilice la sintaxis siguiente en la declaraci贸n de la clase:


Donde:

La palabra clave modificador_clase es opcional (como indican los corchetes) y puede ser public, abstract o final. Si no se incluye modificador_clase en la declaraci贸n de clase, 茅sta adopta autom谩ticamente un valor predeterminado que algunas veces se denomina “nivel de paquete” y permite acceder 煤nicamente a otras clases del mismo paquete.

La palabra clave class indica al compilador que el bloque de c贸digo contiene una declaraci贸n de clase.

NombreSubClase es el nombre asignado a la subclase.

La palabra clave extends indica al compilador que se trata de una subclase de otra clase.

NombreSuperClase es el nombre de la superclase ampliada por esta subclase.

Ejemplo de declaraci贸n de subclase

Por ejemplo, el c贸digo siguiente contiene una clase Shirt que ampl铆a la clase Clothing.

La clase Shirt ampl铆a la clase Clothing al heredar de ella. Observe que la clase Shirt s贸lo contiene las variables y los m茅todos espec铆ficos de un objeto Shirt.

Abstracci贸n

Una de las caracter铆sticas de una buena soluci贸n programada en Java es que la jerarqu铆a de las clases que se cree sea muy generalizada en la parte superior a fin de dejar espacio para posteriores a帽adidos m谩s concretos.

La abstracci贸n en el an谩lisis y el dise帽o

La abstracci贸n se refiere a la creaci贸n de clases que son muy generales y no contienen m茅todos con una implementaci贸n concreta o c贸digo del cuerpo del m茅todo.

Un buen ejemplo de clase abstracta es la clase Item (art铆culo). Un art铆culo es un concepto abstracto (normalmente no se entra en una tienda para decir “quiero comprar un art铆culo”) que puede referirse a cualquier elemento vendido en una tienda.

Sin embargo, todos los art铆culos podr铆an tener caracter铆sticas similares en un sistema de introducci贸n de pedidos, por ejemplo, un ID o un m茅todo para ver la informaci贸n sobre el art铆culo.

Las clases que son gen茅ricas y no pueden definirse por completo, como es el caso de la clase Item, se conocen como clases abstractas. Las clases que ampl铆an una clase abstracta pueden implementar m茅todos vac铆os de la clase abstracta con c贸digo espec铆fico de la superclase.

Es posible que le interese dedicar m谩s tiempo al an谩lisis y el dise帽o para asegurarse de que su soluci贸n tenga el suficiente nivel de abstracci贸n como para garantizar la flexibilidad.

Clases del API de Java

Como programador con escasos conocimientos de Java, una de sus primeras tareas ser谩 familiarizarse con las clases del API de Java. Las clases del lenguaje Java se agrupan en paquetes seg煤n su funcionalidad. Por ejemplo, todas las clases relacionadas con el n煤cleo del lenguaje Java se encuentran en el paquete java.lang, que contiene clases fundamentales para la programaci贸n en Java tales como String, Math e Integer.

Existen dos categor铆as de clases en el API de Java: aquellas a las que es posible hacer referencia de forma impl铆cita en cualquier c贸digo que escriba (como la clase System utilizada para acceder al m茅todo println) y aquellas que es preciso importar o calificar en su totalidad.

Clases disponibles de forma impl铆cita

En todos los programas es posible hacer referencia de forma impl铆cita a todas las clases del paquete java.lang. Este concepto significa que no necesita mencionar el paquete ni la clase cuando utilice la clase.

Importaci贸n y calificaci贸n de clases

La mayor铆a de las clases del API de Java no est谩n disponibles de forma impl铆cita para usarlas en los programas. Es preciso utilizar sentencias de importaci贸n o hacer referencia a ellas utilizando sus nombres totalmente calificados (nombre del paquete y la clase) para todos los paquetes que quiera utilizar en sus programas. Estos paquetes incluyen los siguientes:

  • El paquete java.awt contiene clases que componen las herramientas AWT (abstract windowing toolkit). Se utiliza para construir y manejar la interfaz gr谩fica de usuario (GUI) de la aplicaci贸n.
  • El paquete java.applet contiene clases que proporcionan comportamiento espec铆fico de los applets.
  • El paquete java.net contiene clases para realizar operaciones relacionadas con la red tales como las conexiones de sockets y URL.
  • El paquete java.io contiene clases que manejan la entrada/salida (E/S) de archivos, por ejemplo, la lectura o escritura en una unidad de disco duro.
  • El paquete java.util contiene clases utilitarias para tareas tales como la generaci贸n de n煤meros aleatorios, la definici贸n de propiedades del sistema y el uso de funciones relacionadas con las fechas y el calendario.

Hay dos formas de hacer que estas clases est茅n disponibles para un programa:

  • Puede importar la clase utilizando la sentencia import.
  • Puede hacer referencia a ella utilizando un nombre de clase con todos sus calificadores.

Sentencia import

Puede utilizar sentencias import para facilitar la lectura del c贸digo ya que estas sentencias acortan el c贸digo que debe escribir para hacer referencia expl铆cita a una clase del API de Java. Hay dos formas de sentencias de importaci贸n:

Donde:

La palabra clave import permite hacer referencia a las clases del API de Java utilizando un nombre abreviado.

nombre_paquete es el nombre del paquete en el que se encuentra la clase.

NombreClase es el nombre de una clase concreta que se va a importar. Si no se especifica ning煤n nombre de clase, podr谩n utilizarse todas las clases del paquete en el programa.

Como alternativa, puede sustituir NombreClase por un asterisco (*) a fin de poder hacer referencia a cada clase del paquete por su nombre de clase concreto.

La sentencia import resulta confusa para muchos programadores porque sugiere que en realidad est谩n eligiendo las clases que se combinar谩n en su programa durante la compilaci贸n. Por el contrario, puede utilizar las sentencias import para clarificar el c贸digo al lector porque estas sentencias acortan el c贸digo que debe escribirse para hacer referencia a un m茅todo de una clase.

Por ejemplo, la clase siguiente importa el paquete java.awt para posibilitar a la clase el acceso a las clases de interfaz gr谩fica de AWT.

Especificaci贸n del nombre totalmente calificado

En lugar de especificar el paquete java.awt, puede hacer referencia a la clase Button mediante el nombre java.awt.Button a lo largo de todo el programa.

Por ejemplo, a continuaci贸n figura una declaraci贸n de clase que utiliza el nombre calificado al especificar su superclase. La sintaxis del nombre calificado es como sigue:

Donde:

nombre_paquete es el nombre del paquete en el que se encuentra la clase.

NombreClase es el nombre de una clase concreta a la que se est谩 haciendo referencia.

Por ejemplo, en la siguiente declaraci贸n de clase se utiliza el nombre calificado para ampliar la clase Button.

Muchas gracias por la visita al blog, en este capitulo, se acaban todo lo que es teoria en cuanto a los fundamentos del lenguaje de Programaci贸n Java en las publicaciones futura de desarrollaran algunas punto de programaci贸n con codigo java nativo, java swing y java web con los framework. adicional a ellos de desarrollara algunas fundamentos de base de datos oracle 11 y/o 12.

Suscribanse al canal de Youtube. Ir a canal de YouTube y Espero sus donaciones pulsando el boton DONAR.

Raul Tamani A. ©. Im谩genes del tema de fpm. Con tecnolog铆a de Blogger.

Adblock Detectado

Apoya este sitio desactivando el Adblock para seguir navegando. ¡Gracias!

¡Ya Desactive el Adblock!