buscador

Visita

Mostrando las entradas con la etiqueta Herencia. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Herencia. Mostrar todas las entradas

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!