0% encontró este documento útil (0 votos)
27 vistas26 páginas

L3

Cargado por

cachorrotrenque
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas26 páginas

L3

Cargado por

cachorrotrenque
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Está en la página 1/ 26
Programacion orientada a objetos Introduccién En este tercer médulo se van a aplicar los fundamentos de la programacién orientada a objetos, utilizando el lenguaje de programacién Java. Es importante conocer las caracteristicas esenciales del lenguaje, tales como los tipos de datos, estructuras de control y el manejo de excepciones. Se requiere la aplicacién de los pilares fundamentales de la POO (programacién orientada a objetos), es decir, encapsulamiento, herencia, polimorfismo y abstraccién, Estos pilares proporcionan la base para el desarrollo de software, considerando la modularidad, flexibilidad y facilidad de mantenimiento, Para la codificacién, se deben utilizar estructuras condicionales y de repeticién, para controlar el flujo de ejecucién de un programa, Adicionalmente, se debe contemplar la deciaracién y creacién de objetos en Java, asi como el uso de constructores para inicializar objetos. Al final de cada médulo se aplicaran los conceptos de forma practica, utiizando como referencia el proyecto informatico planteado como base de trabajo para la materia, Te recomiendo apoyarte en las lecturas y bibliografia propuesta en las materias —_ INF382 — Programacién Orientada a Objetos INF386 — Taller de Algoritmos y Estructuras de Datos | Programacién orientada a objetos (POO) La programacién orientada a objetos es una forma especial de programar mas cercana a la forma en que se expresan las cosas en la vida real. En tu dia a dia, no estés constantemente analizando las caracteristicas de todo lo que te rodea, sino que te abstraes y clasificas las cosas segtin sus caracteristicas y comportamientos. En este paradigma se debe pensar el desarrollo, dividiendo el problema en objetos que tienen caracteristicas (llamadas atributos) y comportamientos (llamados métodos). Los objetos deben poder comunicarse entre ellos para trabajar en conjunto y construir las aplicaciones, lo cual se hace a través del paso de mensajes. Algunos atributos y métodos permiten la interaccién entre objetos, mientras que otros son solo internos. La POO permite que el oédigo sea reutilizable, organizado y facil de mantener. En programas complejos, es mas simple trabajar con objetos, ya que, en lugar de definir médulos, se definen relaciones entre componentes, lo que evita duplicar el cédigo y crear programas eficientes. Si se necesita una nueva funcionalidad, se podria agregar un nuevo objeto o afiadir datos y funcionalidades a los objetos que ya existen. demas, evita el acceso no deseado a los datos o la exposicién de cédigo propietario Se podria decir que un lenguaje que permite definir los tipos de datos, las acciones sobre estos y que se puedan reusar, estaria cumpliendo la idea central de la POO. La diferencia entre estos lenguajes se puede marcar por los métodos de instanciacién o creacién de objetos que usan. En el caso de Java, se utiliza la clase como forma de crear los objetos. Objetos En el mundo real, se identifican los objetos como elementos que cuentan con propiedades especificas y tienen ciertos comportamientos que los hacen diferentes de otros objetos. En la programacién orientada a objetos (POO), un objeto representa una entidad real o abstracta que cumple una funcién definida en el dominio del problema que se esta representando con el programa. Los programas en Java se componen de muchos objetos que interactian entre si y todos tienen tres caracteristicas 0 propiedades: estado, comportamiento e identidad Estado: consiste en las propiedades de un objeto. Los atributos son datos que diferencian un objeto de otro y todos ellos en conjunto constituyen su estado. Cada objeto almacena informacién acerca de su estado actual y, en ese momento, se corresponde con valores determinados para cada uno de sus atributos. Los atributos de un objeto son caracteristicas que le da una clase y describen un rango de valores. Un objeto y su clase asociada pueden tener varios atributos 0 ninguno. El estado de un objeto puede cambiar con el tiempo, como consecuencia de llamadas a métodos. Comportamiento: el comportamiento de un objeto representa sus operaciones y responde a los métodos que se le pueden aplicar. Todos los objetos de una misma clase soportan el mismo comportamiento determinado por los métodos, que se pueden utilizar para cambiar sus atributos, enviar © recibir informacién de otros objetos. Identidad: la identidad es la propiedad que diferencia un objeto de otro similar mediante un identificador que refleja naturalmente el dominio del problema. Su estado no describe totalmente al objeto, ya que cada uno tiene distinta identidad, que es como finalmente un objeto se diferencia de otros que pueden tener el mismo comportamiento y estado. Un programa tipico de Java crea muchos objetos que interacttian unos con otros, al invocar métodos. Esto esta en contraposicién a la visién tradicional, en la cual un programa es una coleccién de subrutinas (funciones 0 procedimientos), o simplemente una lista de instrucciones para el computador. Cada objeto es capaz de recibir mensajes, procesar datos y enviar mensajes a otros objetos de manera similar a un servicio. Un objeto, ademas de identidad, tiene valores bien diferenciados en sus atributos, lo que permite diferenciarlo frente a otros objetos de la misma o distinta clase. A su vez, los objetos disponen de mecanismos de interaccién llamados métodos, que permiten la comunicacién entre ellos. Esta caracteristica permite tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento, Los métodos (comportamiento) y atributos (estado) estan estrechamente relacionados por la propiedad de conjunto. Un objeto es cualquier cosa, real o abstracta, en la que se almacenan datos y aquellos métodos (operaciones) que manipulan los datos. Para realizar esa actividad se afiade a cada ‘objeto de la clase los propios datos y los asociados con sus propios métodos miembro que pertenecen a la clase. (Martin y Odell, 1995) Los valores de los atributos se guardan en los miembros, datos o variables de instancia. Las funciones miembros representan los métodos que definen las operaciones que manipulan los datos. El hecho de que los objetos tengan estado implica que ocupan un espacio, en el caso de un programa, en la memoria del computador. EI objeto adquiere un estado durante su creacién y puede ir modificandose durante todo el tiempo de ejecucién hasta que el programa finalice o se pierda la referencia de ese objeto y sea eliminado por el recolector de basura Clases Una clase es una plantilla a partir de la cual se crean objetos mediante un proceso denominado instanciacién. Cuando se construye un objeto de una clase, se dice que se ha creado una instancia y todos los objetos que se derivan de la misma clase tienen caracteristicas similares. Cada clase contiene atributos, que son las especificaciones de los datos que describen a los objetos que se crean a partir de ella, y los métodos, que son una descripcién de sus acciones. Siempre que se invoque un método de un objeto, los programas deben interactuar con los datos solo a través de los métodos. En esencia, una clase en POO es la definicién de un tipo de dato, que va a depender de lo que se esta programando y cémo se la defina. Es la herramienta que se tiene para modelar objetos de programacién, lograr que se comporten de una determinada manera y hacer tantas copias de estos objetos como se necesite, Una clase, para Booch (1996), “es el conjunto de objetos que comparten una estructura, comportamiento y seméntica comunes” (p. 120). Todo el cédigo escrito en Java estd dentro de una clase. Las AP! de Java contienen clases estandares que se pueden utilizar para diversos propésitos, permitiendo disminuir los tiempos de desarrollo y optimizar el funcionamiento del programa. Ademas, cada programador puede crear sus propias clases que describan los objetos del dominio del problema de sus aplicaciones. Método constructor Este método constructor recive dos parametros e inicializa los atributos del objeto en tiempo de ejecucién, También, se podria definir el siguiente constructor: Auto (){ } Este tipo de constructor se denomina constructor por defecto, que se caracteriza por no recibir ningun parametro y tener un cuerpo vacio. En este caso, el constructor inicializa los atributos del objeto con valores predeterminados por los tipos de datos de estos. Si no se define en forma explicita ningun constructor, el compilador definird un constructor por defecto. Tabla 1. Constructor por defecto Tipo de dato Valor por defecto byte, short, int, long 0 float, double 0.0 boolean false char “wo000" objeto null Fuente: elaboraciin propia Herencia La herencia es la capacidad de crear clases que adquieren de manera automatica los atributos y métodos de otras clases que ya existen. Permite definir nuevas clases basadas en unas ya existentes, a fin de reutilizar el cédigo, generando una jerarquia de clases dentro de una aplicacién. Si una clase deriva de otra, esta hereda sus atributos y métodos. Adicionalmente, puede ajiadir nuevos alributos, métodos 0 redefinir los heredados. Java soporta la herencia, permitiendo a una clase incorporar otra clase en su declaracién. Esto se hace mediante el uso de la palabra clave «extends». Por lo tanto, la subclase se extiende a la superciase. La clase principal de la que derivan las restantes se denomina superciase, principal o padre, y las extendidas se denominan subclase, derivada o hijas. Pues, una subclase es una versién especializada de una superclase; hereda todas las variables y métodos definidos por la superciase y agrega sus propios elementos tinicos. A continuacién, un resumen de algunos conceptos importantes. + Superclase: la clase cuyas caracteristicas se heredan se conoce como superciase o clase principal. + Subclase: la clase que hereda la otra clase se conoce como subclase 0 clase derivada. Puede agregar sus propios campos y métodos, ademds de los campos y métodos de la superciase. + Reutilizacién: la herencia refuerza el concepto de reutilizacién, Cuando se necesita crear una clase nueva y ya hay una clase que incluye parte del cédigo, se puede derivar la nueva clase de la clase existente. Al hacer esto, se esta reutilizando los campos/atributos y métodos de la clase existente. Constructores La subclase requiere que se ejecute el constructor de la superclase antes que su propio constructor para inicializar las variables de instancia heredadas. La manera de hacerlo es incluyendo la palabra reservada «super», seguida, entre paréntesis, de los parametros correspondientes como primera linea de cédigo en el cuerpo del constructor de la subclase super(parametros opcionales); De esta forma, la implementacién de un constructor de la clase descendiente solo necesita inicializar directamente las variables de instancia no heredadas. Si no aparece como primera sentencia, el compilador inserta una llamada implicita super(); que inicializa las variables de instancia a cero, false, caracter nulo o null, dependiendo de su tipo. Sin embargo, se recomienda como buena practica incluir esta linea siempre. Esta llamada en cadena a los constructores de las clases ascendientes llega hasta el origen de la jerarquia de clases, el constructor de la clase «Object». La creacién de una nueva instancia mediante un constructor debe tener tres fases: * Se llama al constructor de la clase ascendiente. + Se asignan valores a los atributos * Se ejecuta el resto del constructor. Clase «Object» Independientemente de utilizar la palabra reservada «extends» en su declaracién, todas las clases derivan implicitamente de una superclase llamada «Object», que es a clase raiz de toda la jerarquia de clases de Java. Por este motivo, todas las clases tienen algunos métodos heredados de la clase «Object» En la tabla que se presenta a continuacién se describen algunos métodos de la clase «Object». Tabla 2. Métodos de la clase «Object» Método Sintaxis hashCode int hashCode getClass class getClass() boolean equals equals(Object obj) clone Object clone() Propésito Devuelve el cédigo hash (direccién de memoria) asociado con el objeto invocado. Obtiene la clase de un objeto en tiempo de ejecucion. Determina si un objeto es igual a otro, es decir, contiene la misma informacién en sus atributos. Crea un nuevo objeto, que es el mismo que el objeto que se esta clonando, Devuelve un string que contiene una cadena que describe toString String toString() obj el objeto. Encapsulamiento Permite a los objetos elegir qué informacién es publicada y qué informacién es ocultada al resto de los objetos. Para hacerlo, los objetos presentan sus métodos como interfaces puiblicas y sus atributos como datos privados e inaccesibles, para evitar su exposicion. Con el encapsulamiento de los datos se consigue que quienes utilicen un objeto solo tengan que comprender sus interfaces 0 métodos, olvidandose de cémo esta implementada. Esto, a su vez, reduce la complejidad de su utiizacién. La abstraccién permite ocultar detalles innecesarios y solo muestra las caracteristicas esenciales del objeto. No hay implementacién, es un concepto que permite enfocar la atencién en nivel mas alto del problema y reducir su complejidad. El encapsulamiento sucede cuando se oculta informacién del objeto con la ayuda de los modificadores, para proteger sus atributos y permitir la interaccién con el exterior, solo mediante una interfaz que accede a los métodos piiblicos del objeto. Un simple ejemplo para entender esta diferencia es un teléfono mévil: la légica compleja en la placa de circuito esta encapsulada en una pantalla tactil y se proporciona la interfaz para abstraerla. La abstraccién de un objeto deberia preceder a las decisiones sobre su implementacién. Una vez que se ha definido, debe tratarse como un secreto de la abstraccién, oculto para la mayoria de los clientes. Ninguna parte de un sistema complejo debe depender de los detalles internos de otras partes. Mientras la abstraccién ayuda a las personas a pensar sobre lo que estan haciendo, el encapsulamiento permite que los cambios hechos en los programas sean confiables con el menor esfuerzo. La abstraccién y el encapsulamiento son conceptos complementarios: la abstraccién se centra en el comportamiento observable de un objeto, mientras que el encapsulamiento se centra en la implementacién que da lugar a este comportamiento. El encapsulamiento se consigue con la ocultacién, la informacién, que es el proceso de ocultar todos los secretos de un objeto que no contribuyen a las caracteristicas esenciales; tipicamente la estructura de un objeto, asi como la implementacién de sus métodos, (Pressman, 2010) La interfaz de una clase representa un contrato de prestacién de servicios entre ella y los demas componentes del sistema. De esta forma, se necesita conocer solo los servicios que esta ofrece y no cémo estan implementados internamente, El encapsulamiento oculta lo que hace un objeto de lo que hacen otros objetos del mundo exterior. Para lograr un menor grado de encapsulacién en Java, se utilizan los modificadores que se desarrollaran a continuacién. Modificadores de acceso Los modificadores de acceso introducen el concepto de encapsulamiento, ya que pretenden controlar el acceso alos datos que conforman un objeto o instancia, De esta manera, se puede decir que una clase y sus instancias, que utizan modificadores de acceso (especialmente privados), son objetos encapsulados. Los modificadores de acceso permiten dar un nivel de seguridad mayor a las aplicaciones, restringiendo el acceso a diferentes atributos, métodos, constructores, y asegurando que el usuario deba seguir un camino especificado para acceder a la informacién Cuando las clases son usadas por otros programadores, mediante los modificadores, se asegura que un valor no seré modificado incorrectamente. E| acceso a los atributos privados se realiza mediante los métodos getter y setter. Siempre que se use una clase de otro paquete, se debe importar usando «import», Cuando dos clases se encuentran en el mismo paquete, no es necesario hacer el «import», pero igualmente se debe referenciar el acceso a sus componentes. Acontinuacién, se resumen los modificadores que, ademés del piiblico, estan disponibles en Java. Modificador de acceso private: es el mas restrictivo de todos, cualquier elemento de una clase que sea privado puede ser accedido Unicamente por la misma clase. Es decir, si, por ejemplo, un atributo es privado solo puede ser accedido por los métodos constructores de la misma clase. Ninguna otra clase, sin importar la relacién que tengan, podra tener acceso a ellos. Modificador por defecto (default): Java da la opcién de no usar un modificador de acceso y, en este caso, el elemento tendra un acceso conocido como «default», que permite que, tanto la propia clase como las clases del mismo paquete, accedan a los componentes (es un motivo para declarar siempre un paquete para tus clases) Modificador de acceso protected: te permite acceso a los componentes con dicho modificador desde la misma clase, clases del mismo paquete y clases que hereden de ella (incluso en diferentes paquetes). (Meza Gonzalez, 2021, https://go0.su/ESCue) Acontinuacién, se presenta un resumen de accesos que permite cada modificador de Java. Tabla 3. Accesos que permiten cada modificador de Java Modificador Clase Subclase Paquete Todos sl si si public (+) sl sl Ne) No private (-) NO sl sl sl protected (#) No sl No sl No declarado No Fuente: Meza Gonzélez, 2021, hitps.!go0.suESCue Meza Gonzalez (2021) sostiene que: El modificador de acceso «protected» puede ser accedido desde una subclase, pero esto no significa que se puede crear un objeto de la clase madre y, luego, acceder al atributo con acceso «protected» sin problemas. El modificador «protected» lo que permite es acceder al atributo heredado desde el ambito de la clase hija y no directamente. (https://goo.su/FSCue) Abstracci6n En general, la abstraccién es una forma que tienen los seres humanos para intentar reducir la complejidad. En POO, la abstraccién es un concepto que permite seleccionar las caracteristicas relevantes de un objeto, para reducir la complejidad y el esfuerzo de programacién. De esta manera, un programa solo va a utilizar las propiedades que requiera de dicho objeto para una funcién particular. La abstraccién se centra en las ideas y no en los eventos, exponiendo al usuario solo la funcionalidad. Shaw y Garlan (2015) definen a la abstraccién de la siguiente manera: Abstraccién es una descripcién simplificada o especificacién de un sistema que enfatiza en algunos de los detalles o propiedades de este, mientras que suprime otros. Una buena abstraccién es aquella que enfatiza detalles significativos al lector 0 usuario y suprime detalles que son, al menos por el momento, irrelevantes o causa de distraccién. Las clases son la abstraccién de los conceptos que maneja la aplicacién. Pueden ser conceptos que existan en el mundo real, pero simplificados, considerando solo las propiedades relevantes para la aplicacién, 0 pueden ser conceptos que no tengan una existencia fisica en el mundo real, por ejemplo, un archivo. Dado que Java es un lenguaje de programacién orientada a objetos, la abstraccién es una de las caracteristicas y componentes importantes. Java proporciona un modificador «abstract» para implementar la abstraccién en clases y métodos (no con variables). Una clase abstracta proporciona una abstraccién parcial, en la que, al menos, uno de sus métodos no es abstracto. La interfaz proporciona una abstraccién completa, es decir, que solo proporciona prototipos de métodos y no su implementacién. Clase abstracta Es una clase declarada con la palabra clave «abstract» y tiene la caracteristica de que no se puede instanciar, La estructura es practicamente igual a una clase convencional, ya que pueden tener atributos, métodos, constructores; pero la principal diferencia es que la clase abstracta debe contar con al menos un método abstracto. Como no puede ser instanciada, se utiliza en una herencia como superclase para proporcionar una estructura general y dejando que sus subclases definan las implementaciones a los métodos abstractos en ella, Estas subclases deben sobrescribir todos los métodos abstractos de la superciase, ya que, de lo contrario, deberian declararse como abstractas también. Se utiizan para generalizar y abstraer ciertas clases, definiendo atributos y métodos comunes a sus subclases, para evitar la definicién repetida. En otras palabras, la clase abstracta se usa, principalmente, para definir la clase principal de varias clases con la misma funcién + No se puede utilizar «new» para una clase abstracta, ya que tiene métodos que no estan definidos. Tampoco se puede definir como final, porque esta no se puede heredar. Si una clase hereda de una clase abstracta, debera de sobrescribir todos los métodos abstractos, porque, de lo contrario, la clase que hereda debera ser pasada a abstracta * Cuando se define una clase como abstracta, no se puede crear una instancia, pero si es posible tener un constructor. No se va a poder utilizar directamente, pero cuando se crea un objeto de una clase que es concreta y subclase de la clase abstracta, el constructor de la clase abstracta se invoca automaticamente. Las clases abstractas funcionan como una clase que declara la existencia de métodos, pero no su implementacién, lo cual se hard luego en las diferentes subclases derivadas. Una clase abstracta puede contener métodos no abstractos, pero al menos uno de los métodos si debe serlo. Método abstracto Es un método sin cuerpo, precedido por una palabra clave «abstract», sin ninguna implementacién que se declara dentro de una clase abstracta. El método abstracto nunca sera definitivo, ya que una subclase hereda la clase abstracta y, luego, implementa o proporciona el cédigo para todos los métodos abstractos declarados. Si el método abstracto no esta implementando en la subclase, entonces, se tiene que declarar también como abstracta. Algunas caracteristicas de los métodos abstractos son las siguientes: + No tienen una implementacién, solo tienen la signatura del método. » Si una clase usa un método abstracto, debe declararse abstracta. Una clase abstracta puede tener también métodos regulares. * Siuna clase regular extiende una clase abstracta, entonces, esa clase debe implementar todos los métodos abstractos del padre abstracto. Interfaces El equipo de Geek (2019) define a las interfaces del siguiente modo: Son unas clases completamente abstractas que contienen solo una coleccién de métodos abstractos y propiedades constantes. En una interfaz se especifica qué se debe hacer, pero no su implementacién. Las clases que implementen estas interfaces seran las que describan las acciones que puede llevar a cabo un determinado objeto. (httpsul/go0.su/yQvL5) Cuando se define una interfaz, puede ser utilizada por muchas clases, a su vez, una clase puede implementar muchas interfaces. Cada clase puede determinar los detalles de su propia implementacién, asi, dos clases pueden implementar la misma interfaz de diferentes maneras, siempre que utilicen el mismo conjunto de métodos. En una clase abstracta, ademas de aparecer los métodos, aparecia el cédigo para dichos métodos, En cambio, en una interfaz solo existe el método, no su cédigo. Algunas especificaciones para interfaces son las siguientes: + Se definen utilizando la palabra clave de la interface. + No puede contener un constructor porque las interfaces no pueden ser instanciadas. + Las interfaces pueden extender otras interfaces. + Una clase puede implementar cualquier ntimero de interfaces. + No se pueden declarar variables de instancia. (Geek, 2019, https://goo.su/yQvL5) Garro (s-f.), respecto a las interfaces, sostiene que’ La declaracién de una interfaz es similar a una clase, aunque emplea la palabra reservada interfaz en lugar de class y no incluye ni la declaracién de variables de instancia ni la implementacién del cuerpo de los métodos (solo el encabezado). [...] Los métodos son declarados implicitamente, como public y abstract (se pueden omit). ‘demas, todas las constantes incluidas en una interfaz se declaran implicitamente como public, static y final (también se pueden omitir) y es necesario inicializarlas en la misma sentencia de declaracién. En cuanto a la implementacién de interfaces, para declarar una clase que implemente una interfaz, es necesario utilizar la palabra reservada «implements», en la cabecera de declaracién de la clase. Las cabeceras de los métodos (identificador, ntimero y tipo de parametros) deben aparecer en la clase tal y como aparecen en la interfaz implementada (httpsil/goo,su/aibJth) Los métodos que implementan una interfaz deben declararse piiblicos. Ademas, la signatura de tipo del método de implementacién debe coincidir exactamente con la signatura de tipo especificada en la definicion En muchas ocasiones, una interfaz es empleada para definir un comportamiento que sera implementado por diversas clases; aunque podrian no tener relacién entre ellas, todas se comportan igual respecto a la interfaz. Siguiendo con los planteos de Garro (s-f.), respecto a la jerarquia, diremos que: La jerarquia entre interfaces permite la herencia simple y multiple. Tanto la declaracién de una clase como la de una interfaz, pueden incluir la implementacién de otras interfaces. [...] Una clase puede descender de otra clase e implementar una o varias interfaces; en este caso, implements se coloca a continuacién de extends, en la cabecera de declaracién de la clase. (https://goo.su/aibJth) Polimorfismo En la programacién orientada a objetos, el polimorfismo es la capacidad que tienen los objetos de una clase en dar una respuesta distinta al mismo mensaje, a partir de los parémetros utilizados durante su invocacién. Permite que un objeto de una clase se comporte como un objeto de cualquiera de sus ‘subclases durante la ejecucién del programa. Siguiendo los planteos de Deitel y Deitel (2016), sobre polimorfismo, podemos decir que este: Permite programar en forma general, en vez de programar en forma especifica. En particular, permite escribir programas que procesen objetos que compartan la misma superciase —ya sea de manera directa o indirecta—, como si todos fueran objetos de la superclase. Esto puede simplificar la programacién. (p. 418) Recordemos que la herencia permite que una clase adquiera los atributos y métodos de otras clases ya existentes, es decir, que un solo algoritmo de la clase principal puede utilizarse en distintas entidades de clases derivadas. Ademas, el encapsulamiento oculta informacién del objeto con la ayuda de modificadores, para proteger sus atributos y permitir la interaccién con el exterior solo mediante una interfaz, que accede a los métodos ptiblicos del objeto. Esto puede hacerse desde cualquier clase que implemente dicha interfaz. Polimorfismo es la capacidad que le permite a un método tener el mismo nombre en diferentes clases y actuar de modo distinto en cada una de ellas, Debido a que el comportamiento de un objeto esta relacionado con los métodos que se le definen, la capacidad polimérfica de una clase se presenta al crear métodos con el mismo nombre y diferentes comportamientos. La palabra deriva del griego polys, que significa muchos, y morfo, que significa forma. Aplicado a la POO, se suele decir que el polimorfismo es la habilidad de que un objeto pueda tomar muchas formas. 1. Desarrollo del sistema utilizando Java Recordemos que nos encontramos trabajando en el equipo de desarrollo de ECOViento y nos solicitan liderar un proyecto informatico para disefiar y desarrollar un sistema de monitoreo y control de centrales edlicas. En el tercer médulo se aplicaran los conceptos de programacién orientada a objetos en Java, utilizando sus pilares fundamentales para la creacién de un sistema. Los entregables son los siguientes: + Explicacién del desarrollo en Java. + Presentacién del desarrollo en Java, Explicacion del desarrollo en Java De acuerdo con los requerimientos no funcionales especificados, el sistema se debe desarrollar en Java. Se debe lograr un cédigo estructurado, legible y modular, para facilitar la comprensién, el mantenimiento y la escalabilidad del proyecto. Sin perder de vista que el proyecto debe contemplar el desarrollo del sistema completo, en esta instancia se va a trabajar con un prototipo que permita obtener un minimo producto viable. Retomando las definiciones tomadas en el PUD, se puede observar que el desarrollo requiere el uso de cuatro clases, a las cuales se van a sumar dos extras, una con el menti y otra para lanzar una excepcién del tipo «TurbinaExcepcion», con el fin de manejar un mensaje de error ante determinadas condiciones no soportadas por la turbina de la central Se analizara, a continuacién, algunas de las caracteristicas mas importantes de cada una de las clases. Clase «Central Eolica» Acontinuacién, se presenta el diagrama de clase definido en la etapa de disefio: Figura 1. Clase «Central Eolica» Centrigolica nombre: Sing ‘utina: Liste TursinaEoea> + agregarTurbina(trbna:TurinaEoica: vols ‘TiscarTurbina(numeroTubin: it oH. 4 detenerTurbinafoumeroTurbin it Void + talelarEnergGenerada) double + geTurbinas(:ListcTubnacotca> + hayTutbinas(: boolean + mosvarodasLasTurpinas(: vole Fuente: elaboracién propa Esta clase contiene dos atributos privados y el constructor. * nombre: representa el nombre de la central edlica. + turbinas: representa una lista de objetos del tipo «TurbinaEolica» Figura 2. Atributos y constructor Fuente: elaboracin propia Adicionalmente, cuenta con los siguientes métodos: + Método agregarTurbina() Figura 3. Método agregarTurbina() Fuente: elaboracién propia * Método iniciarTurbina() Figura 4. Método iniciarTurbina() Fuente: elaboracién propia * Método detenerTurbina() Figura 5. Método detenerTurbina() Fuente: elaboracién propia + Método calcularEnergiaGenerada() Figura 6. Método calcularEnergiaGenerada() Fuente: elaboracién propia * Método getTurbinas() Figura 7. Método getTurbinas() Fuente: elaboraciin propia * Método hayTurbinas() Figura 8. Método hayTurbinas() Fuente: elaboraciin propia ‘© Método mostrarTodasLasTurbinas() Figura 9. Método mostrarTodasLasTurbinas() Clase abstracta «TurbinaEolica» Fuente: elaboracién propia Acontinuacién, se presenta el diagrama de clase definido en la etapa de disefio Figura 10. Clase abstracta «TurbinaEolica» Fuente: elaboracién propia TurbinaEolica # numeroTurbina: int # modelo: String # funcionando: boolean + generarElectricidad(): double + iniciar(): void + detener(): void + verificarCondicionesArranque(): boolean + obtenerVelocidadViento(): double + estaF uncionanda(): boolean + getEstado(): String La misma contiene tres atributos protected y el constructor. * numeroTurbina: representa el nlimero de la turbina. + modelo: representa e| modelo de la turbina, + funcionando: muestra si la turbina esta funcionando o no, Figura 11. Atributos y constructor Fuente: elaboracién propa Adicionalmente, cuenta con los siguientes siete métodos: * Método abstracto generarElectricidad() Figura 12. Método abstracto generarElectricidad() Fuente: elaboracién propa * Método iniciar) Figura 13. Método iniciar() Fuente: elaboraciin propia + Método detener() Figura 14, Método detener() Fuente: elaboraciin propia + Método verificarCondicionesArranque() Figura 15, Método verificarCondicionesArranque() Fuente: elaboraciéin propia + Método obtenerVelocidadViento() Figura 16. Método obtenerVelocidadViento () Fuente: elaboracién propa + Método estaFuncionando() Figura 17, estaFuncionando() Fuente: elaboraciin propia + Método getEstado() Figura 18. Método getEstado() Fuente: elaboracién propa Clase «TurbinaEolicaNacional» (subclase de «TurbinaEolica») Acontinuacién, se presenta el diagrama de clases definido en la etapa de disefio. Figura 19. Clase «TurbinaEolicaNacional» TurbinaEolicaNacional - potenciaMaxima: int + generarElectricidad(): double Fuente: elaboracién propia Esta clase contiene un atributo privado, potenciaMaxima, que representa la maxima potencia capaz de generar la turbina y el constructor. Figura 20. Atributo potenciaMaxima Fuente: elaboracién propa Adicionalmente, esta clase sobrescribe e implementa el siguiente método heredado de la clase abstracta «TurbinaEolica»: * Método abstracto generarElectricidad() Figura 21. Método abstracto generarElectricidad() Fuente: elaboracién propa Clase «TurbinaEolicalmportada» (subclase de «TurbinaEolica») Acontinuacién, se presenta el diagrama de clases definido en la etapa de disefio. Figura 22. Clase «TurbinaEolicalmportada» = TurbinaEolicalmportada - potenciaMaxima: int - multiplicador: int + generarElectricidad(): double Fuente: elaboracién propia Desafio: implementar en el desarrollo la clase «TurbinaEolicalmportada» de acuerdo con el diagrama de clases realizado en la etapa de disefio. Esto, considerando que el atributo multiplicador corresponde a una funcionalidad de este tipo de turbinas, que permite multiplicar por n la potencia maxima de la turbina mediante el pago de un extra a la fabrica para habilitarla. Clase «GestionCentralEolica» Es la clase principal que permite gestionar el menti para realizar distintas opciones propias del MVP que se esta desarrollando. En esta se presentan las siguientes opciones: Agregar Turbina, Iniciar Turbina(s), Detener Turbina(s), Listar turbinas, Calcular Energia Generada y Salir. Figura 23. Clase «GestionCentralEolica» Fuente: elaboraciin propia Clase «TurbinaExcepcion» Una excepcién es una situacién anormal ocurrida durante la ejecucién de un programa que altera su flujo normal, Esta clase permite gestionar el tratamiento de una excepcién para mostrar un mensaje, en caso de que una turbina cumpla las condiciones para comenzar a funcionar. Se podria resolver, también, de otras maneras, pero este es un ejemplo concreto de aplicacién de lanzamiento de excepciones propias. Figura 24. Clase «TurbinaExcepcion» Fuente: elaboracién propia Su aplicacién esta clara en el método iniciar() de la clase «TurbinaEolica». Figura 25. Método iniciar() Fuente: elaboraciin propia Desafio: implementar el manejo de excepciones con try y catch para gestionar el ingreso de un valor no numérico, al seleccionar una opcién en el ment principal, lo cual genera una excepcién del tipo «InputMismatchException» Presentacién del desarrollo en Java En esta instancia, ya ests en condiciones de presentar una primera versién del prototipo, para lo cual te propongo utilizar GitHub: https://github.com/ A continuacién, se adjuntan las clases Java utilizadas para que puedas crear un proyecto en una IDE y comprobar la salida con la ejecucién del programa desarrollado. Fuente: Virgolini, P. (2023). Gestidn central edlica. Archivo inédito. Fuente: Virgolini, P. (2023a). Central edlica. Archivo inédito. Fuente: Virgolini, P. (2023b). Turbina edlica. Archivo inédito. Fuente: Virgolini, P. (2023c). Turbina edlica nacional. Archivo inédito. [a Fuente: Virgolini, P. (2023d). Turbina excepcién. Archivo inédito Referencia Booch, G. (1996). Andlisis y disefio orientado a objetos, con aplicaciones. Editorial Addison Wesley Iberoamericana S.A. Deitel, P., y Deitel, H. (2016). Como programar a Java. Editorial Pearson Equipo Geek. (2019). = Clases_-—=—sabstractas. =e ~—sinterfaces:gqué son? https:/ifgeekthen nttdata.com/es/clases-abstractas-e- interfaces#~:text=Una%20clase%20abstracta%20puede%20contener,los%20m%C3%AStodos%208% C3%AD%20debe%20serlo. Garro, A. (sf). Java. Capitulo 18 interfaces. _hitps:/www.arkaitzgarro.com/javalcapitulo- 18.htmi#declaracion-de-una-interfaz Martin, J., y Odell, J. (1995). Principios del Andlisis y Disefio Orientado a Objetos. Editorial Prentice- Hall. Meza Gonzalez, J.D. (2021). Modificadores de acceso public, protected, default y private en Java. Acceso Pressman, R. (2010). Ingenieria del Software: Un enfoque préctico. Editorial Megraw-Hill. Shaw, M., y Garlan, D. (2015). Software Architecture: Perspectives on an Emerging Discipline. Editorial Pearson India.

También podría gustarte