Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca CAPÍTULO 6: INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Hasta el capítulo anterior cubrimos los conceptos fundamentales de dos técnicas de programación, conocidas como programación estructurada (por que existen estructuras de control) y modular (debido a que se puede dividir un programa en módulos). En este último tema desarrollaremos los principios básicos de otra técnica de programación, denomina Programación Orientada a Objetos o POO según sus siglas y que actualmente se utiliza en la mayoría de proyectos de desarrollo de software. Por lo tanto, se estudiaran los fundamentos de la programación orientada a objetos y comprenderá algunos de los conceptos que se mencionaron en capítulos anteriores, como por ejemplo los modificadores de acceso y la creación de objetos. Además reuniremos bajo un nuevo esquema los conceptos que ya hemos visto, como variables globales y métodos. El presente capítulo se basa en los capítulos 10 “Programación orientada a objetos usando el diagrama de clases” y 11 “Programación orientada a objetos aplicando la estructura de selección” del texto básico. El capítulo 10 expone la base teórica, mientras el 11 la parte práctica. Ambos capítulos son de gran importancia, así que revíselos haciendo una lectura comprensiva, analizando detalladamente los ejercicios y sus explicaciones. Conviene recalcar que desarrollemos algunas explicaciones teóricas que son necesarias comprender y que fundamentaran los ejercicios que revisaremos más adelante, empecemos con la definición de la POO. 6.1 Definiciones básicas Provéase de su texto básico y realice una lectura comprensiva de las páginas 242, 243 y 249 que corresponden al Capítulo 10 “Programación orientada a objetos usando el diagrama de clases”. Revise detenidamente las figuras que ahí se muestran con el afán de que comprenda los conceptos que ahí se expresan. ¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos ciertos elementos de la lectura anterior. Como se menciona en el apartado 10.1 “Objetos”, página 242 del texto básico la POO es una metodología (un conjunto de pasos sistemáticos) para plantear, analizar y resolver problemas. Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Esta metodología, como cualquier otra, tiene un conjunto de principios o pilares fundamentales sobre los cuáles fundamenta toda su estructura de trabajo, estos conceptos son: Objetos, clases, encapsulamiento, herencia y polimorfismo. Todo lenguaje de programación que sea orientado a objetos deben soportar de alguna manera todos estos conceptos. Ponga atención a la figura que se muestra en la página 242 y a su explicación que se encuentra al final de la misma página. En ella puede ver el uso de gráficos para describir las clases que son parte de un programa. A la figura se la denomina “Diagrama de Clases” y fue elaborada usando el Lenguaje de Modelado Unificado (UML). Como se menciona en el párrafo anterior, el UML representa los conceptos de la POO a través de elementos gráficos y de una serie de diagramas. En la página 243 puede ver la estructura general de un objeto expresado como un elemento gráfico del UML, mientras que en la página 249 puede ver el diagrama de una clase. Vamos a iniciar el estudio de algunos de los conceptos fundamentales de la POO. Comencemos revisan los objetos. 6.2 Objetos Acuda nuevamente al texto básico y revise las páginas 243 y 245 como se indica a continuación. Recuerde realizar una lectura comprensiva y el análisis de los ejercicios que ahí se encuentran. En la página 243 se hace la definición formal de un objeto, se muestra como se forma un objeto, su representación gráfica en UML y en el acápite 10.1.3 “Cuándo y cómo identificar los objetos”. Como pudo haber leído en el apartado 10.1.2 “Cómo están formados los objetos”, una de las partes de un objeto son los datos, le recomiendo usar el término atributos en lugar de datos ya que es difundido más ampliamente en la literatura POO. Recuerde que los atributos determinan la estructura del objeto, mientras que los métodos determinan el comportamiento del objeto. La identificación de objetos es algo primordial que debe tener presente desde aquí en adelante, ya que siempre que resuelva problemas con la metodología POO hará esta tarea una y otra vez. La identificación de objetos pertenece a la etapa de análisis de un problema. Para finalizar con este tema lea la explicación que se muestra en la página 245 y las notas 1 y 2 de la misma página. Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Antes de continuar es necesario recordar que generalmente se suele emplear de manera indistinta la palabra objeto con la palabra instancia, así que recuerde que una instancia es un objeto y viceversa. Los nombres de los atributos inician con una letra en minúscula, en caso de estar compuesto por más de una palabra, cada palabra empezará con una letra en mayúscula. Ahora estudiemos otro concepto que al igual que el anterior es un concepto fundamental que lo hemos utilizado desde el primer algoritmo y programa Java. 6.3 Clases Apoyémonos una vez más en el básico, esta vez para y leer las páginas desde la 245 a la 247 como se indica a continuación. Recuerde realizar una lectura comprensiva y el análisis de los ejercicios que ahí se encuentran. En el acápite 10.2 “Clase y su relación con los objetos” se habla del concepto de clase, como representación abstracta de un grupo de objetos que tienen una estructura y un comportamiento común. Por lo tanto: Recuerde que una clase es un molde para definir objetos y un objeto es una instancia de una clase. También se explica que el diseñar una clase es parte del proceso de diseño de un programa y se nos muestra cómo encontrar clases. En la página 246 revise el subtema 10.2.2 “Representación de las clases y sus instancias” para entender la relación entre una clase y los objetos o sus instancias. Dentro de la definición de la estructura de una clase es importante definir los atributos (estructura de la clase) y los métodos (el comportamiento), una explicación de las consideraciones a tener en cuenta, se describen en la página 247 en el acápite 10.3 “Métodos y encapsulamiento”. Conviene tener presente que: Los nombres de las clases inician con la primera letra en mayúscula, en caso de estar formada por más de una palabra, la primera letra de cada palabra lleva su primera letra en mayúscula. Para poder empezar a escribir programas orientada a objetos es necesario Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca realizar los pasos que se muestran a continuación. 6.4 Diseño del diagrama de clases En este momento es necesario revisar las páginas desde la 245, 249, 253 a la 255 del texto básico como se indica a continuación. Recuerde realizar una lectura comprensiva y el análisis de los ejercicios que ahí se encuentran. Tal y como se menciona en la página 245 del texto básico para diseñar un programa POO el algoritmo tiene 2 pasos, el primero es diseñar el diagrama de clases, que lo podemos encontrar en la página 249 del texto básico y el segundo paso es el diseño de la lógica de las clases en pseudocódigo, tarea que la hemos venido haciendo desde el capítulo 1. Lea detenidamente el apartado 10.4.1 “Modificadores de acceso (visibilidad)” ya que aquí se explican los modificadores de acceso (que vimos en los programas Java) tanto en métodos, como en atributos (o datos). Para entender la diferencia entre una clase y un objeto vea la figura que se muestra en la página 253. Fíjese como la clase define los atributos, pero no es posible asignarle valores a esos atributos de la clase; cosa que no sucede con un objeto que posee valores para los atributos. Finalmente se explica la arquitectura modelo-vista-controlador (lea el subtema 10.6 “Arquitectura modelo-vista-controlador”, página 254). Debido a la sencillez de los programas que elaboraremos la arquitectura modelo-vista-controlador se simplifica hasta convertirse en modelo-controlador. En pocas palabras para los problemas de POO crearemos 2 clases, como muestra el ejemplo de la página 255, una clase Empleado que representa el modelo y soluciona el problema planteado. Otra clase (EjecutaEmpleado) que es el controlador, y usa la clase empleado para controlar la interacción con el usuario. Todo lo anterior lo entenderemos en el siguiente punto. Una vez estudiados los conceptos de clases y objetos debemos analizar el pseudocódigo y entender como se soportan los nuevos conceptos estudiados. Para ello revise detalladamente el siguiente subtema. 6.5 Diseño de la lógica de las clases en pseudocódigo Para desarrollar esta temática revise las páginas desde la 258 a la 271 del Capítulo 11 “Programación orientada a objetos aplicando la estructura de secuenciación” del texto básico como se indica a continuación. Recuerde realizar una lectura comprensiva y el análisis de los ejercicios que ahí se encuentran. Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca ¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos ciertos elementos de la lectura anterior. Para desarrollar este tema es necesario ubicarnos en el capítulo 11 del texto básico y empezar a leer el punto 11.1 “Nuestro primer problema” en la página 258. Ahí se vuelve a hablar de los pasos que se necesitan para resolver un problema aplicando la POO. El primer paso lo vimos en el punto anterior; mientras que el segundo es materia de este punto. Lea detenidamente el punto 11.2 “Diseño de algoritmos OO usando la secuenciación en pseudocódigo” y fíjese como se amplía las capacidades de un algoritmo para soportar más de una clase. También revise el ejercicio de la página 261 y su explicación en las página 262 a la 270. Antes de pasar con la implementación en Java, revise los términos Constructor y Destructor que se muestran en las páginas 270 y 271. ¿Qué le pareció la lectura? ¿Comprendió? Si es así continuemos con: La implementación en Java se muestra en las siguientes ilustraciones Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 1 Clase empleado 5 que hace las veces de Modelo Observe como esta clase no define el método principal, es decir que no puede ejecutarse por si sola. Además y tal como se dice en la página 251 del texto básico los atributos son privados y los métodos son públicos. Los atributos se definen desde la línea 13 a la 16 de la Ilustración 81 y todo lo demás son métodos. Generalmente se suele definir por cada atributo los métodos establecer y obtener además de otros métodos útiles que tienen la lógica del problema (como por ejemplo calcularSueldo). Los métodos establecer sirven para configurar el valor de un atributo, mientras que los métodos obtener sirven para consultar el valor de atributo. De ahí la forma estándar de cada uno de ellos. Una buena práctica de programación es usar: Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Los nombres de los métodos suelen ser verbos, que inician con una letra minúscula, en caso de estar compuesto por más de una palabra, la segunda palabra inicia con la primera letra mayúscula. Fíjese en la diferencia con los programas que se desarrollaron en el capítulo anterior. En el capítulo 5 los métodos y atributos se declararon como estáticos por que iban a ser invocados sin la creación de objetos. No así en los ejemplos de este capítulo en donde los atributos y métodos no tienen la palabra static, ya que se crea por lo menos un objeto (Vea la Ilustración 82 en la línea 22). La siguiente imagen muestra la clase controlador Ilustración 2 Clase controlador La Ilustración 82 muestra el controlador del ejemplo que estamos desarrollando, aquí vemos como se crea un objeto (línea 22) y como se invoca a los métodos (líneas 30-32, 34 y 37), este proceso de invocación a métodos también se llama envío de mensajes. Siempre que trabajemos con ejercicios de POO la clase controlador tendrá el método principal y creará objetos o instancias del modelo; interactuará con el usuario y manipulará las instancias creadas. En la clase controlador se pueden crear más de un objeto y manipularlos según sean las necesidades del programa que estamos elaborando. Los ejercicios que se desarrollaran en esta sección serán sencillos y en el mismo estilo que lo muestran las imágenes anteriores. Finalmente en la página 270 del texto básico se habla de constructores y destructores, mientras que en la página 271 se muestra un ejemplo de un Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca constructor. Recuerde que la función principal de un constructor es dar valores iniciales a uno o varios atributos de la clase, sino existe ningún constructor los atributos toman valores por defecto según sus tipos de datos; cero para los números y nulo para los datos texto. Un constructor tendrá el mismo nombre de la clase (coincidiendo hasta en las mayúsculas y minúsculas), nunca tendrá tipo de dato de retorno y puede tener parámetros o no. Los parámetros se usan para asignar valores a los atributos. En Java un constructor tiene la siguiente forma: Ilustración 3 Constructor de la clase Empleado5 Dentro de los lenguajes de programación, como Java y C#, es posible crear una clase que tenga más de un constructor, a lo que se llama sobrecarga de constructores. Es inusual crear un programa que trabaje con algún destructor, tanto a nivel se pseudocódigo, como a nivel de Java, razón por la cual no se cubren ni en la presente guía didáctica ni en el texto básico. Estudiemos con ejemplos los conceptos que se presentaron en este capítulo. Revise detalladamente el análisis que se hace a cada uno de los ejercicios. 6.6 Ejercicios Es necesario tener presente que: en el análisis de los ejercicios desarrollados se utiliza números para referirse a líneas de código de los programas Java. Mientras que, para los algoritmos escritos en pseudocódigo se utiliza letras del alfabeto y a veces la combinación de letras y números. 1. Elabore un algoritmo y un programa en Java que cree una clase que represente a una cuenta de ahorros. La cuenta debe tener su saldo y debe permitir realizar operaciones como depósitos, retiros y consulta de saldo. Algoritmo CUENTA AHORROS Clase Cuenta 1. Declaraciones Datos saldo : Real 2. Método Cuenta (saldoInicial : Real) Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca a. saldo = saldoInicial 3. Fin Método Cuenta 4. Método obtenerSaldo () : Real a. return saldo 5. Fin Método obtenerSaldo 6. Método depositar (monto : Real) a. saldo = saldo + monto 7. Fin Método depositar 8. Método retirar (monto : Real) a. IF monto < saldo THEN 1. saldo = saldo – monto b. ENDIF 9. Fin Método retirar Fin Clase Fin Algoritmo EJECUTA CUENTA AHORROS Clase EjecutaCuenta 1. Método Principal a. Declaraciones Variables saldoActual : Real b. Declarar, crear e iniciar objeto Cuenta cta = new Cuenta(210.8); c. saldoActual = cta.obtenerSaldo() d. Imprimir saldoActual e. cta.depositar(20) f. saldoActual = cta.obtenerSaldo() g. Imprimir saldoActual h. cta.retirar(100) i. saldoActual = cta.obtenerSaldo() j. Imprimir saldoActual 2. Fin Método Principal Fin Clase Fin Los programas en Java se muestran a continuación: Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 4 Clase Cuenta Ilustración 5 Ejecuta Cuenta La salida del programa anterior se muestra a continuación: Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 6 Salida de la clase EjecutaCuenta Análisis: No olvide que: para el análisis del código Java todas los números de líneas hacen referencia a la Ilustración 84. Analicemos la clase Cuenta, esa clase tiene un atributo que se llama saldo (Vea el punto 1. ó la línea 13) Recuerde que en Java los atributos son privados y los métodos públicos. Uno de los métodos es un constructor (El método del punto 2 del algoritmo o la línea 15 Java). Los constructores sirven para inicializar los atributos, en este caso el único atributo (saldo) se inicializa con el parámetro del constructor. Los otros métodos son obtenerSaldo, que lo único que hace es devolver el valor del atributo saldo, el método depositar, incrementa el saldo de la cuenta, por tal motivo recibe un parámetro que se agrega al valor actual del saldo. El método retirar, disminuye el saldo en una cantidad (monto), antes de la disminución del saldo se debe verificar que es posible realizar la transacción, para ello se usa el IF (punto 8.a del algoritmo o la línea 28 Java). La clase EjecutaCuenta, tiene el método principal (es una clase ejecutable) que declara una variable que tendrá el valor del saldo. Se crea un objeto (cta) que es del tipo Cuenta (Vea la línea bajo el punto b. del algoritmo o la línea 16 Java). Cuando se crea un objeto se invoca por defecto al constructor, por lo que se ejecutaría el único constructor que recibe un parámetro que es el saldo inicial de la cuenta. Luego se aplican los métodos obtenerSaldo (puntos c., f., e i. ó líneas 18, 22 y 26), depositar (punto e. o línea 20), retirar (punto h. o línea 25) para observar el comportamiento de la clase. 2. Crear un algoritmo y luego una clase en Java que represente el comportamiento de un contador (así como aquellos contadores que tienen las páginas Web) Cuando se cree el contador se inicializa en 0 y se debe incrementar en una unidad su valor a través de un método. Algoritmo CONTADOR Clase Contador 1. Declaraciones Datos contador : Entero 2. Método obtenerContador () : Entero a. return contador 3. Fin Método obtenerContador Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca 4. Método incrementar() a. contador = contador + 1 5. Fin Método incrementar Fin Clase Contador Fin El programa en Java se muestra a continuación Ilustración 7 Clase contador Ilustración 8 Ejecuta la clase Contador La siguiente ilustración muestra la salida del programa de la Ilustración 88 Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 9 Salida del programa EjecutaContador Análisis: Tenga presente que: para el análisis del código Java todas los números de líneas hacen referencia a la Ilustración 88. La clase Contador es bastante sencilla, posee un atributo y dos métodos, uno para obtener el valor del atributo contador y otro para incrementar el atributo contador. Posiblemente la clase que aporta con algunos detalles es la clase EjecutaContador, en donde se crean 3 objetos del tipo Contador (líneas de la 14 a la 16) y se invoca 2 veces al método incrementar para el objeto c1 (líneas 18 y 19) y una vez para los objetos c2 y c3. Finalmente se muestra el valor que posee cada uno de los objetos en las líneas de la 24 a la 27. 3. Elabore un algoritmo y luego un programa en Java, que represente el funcionamiento de un contador de llamadas entrantes y salientes de un celular. El contador de llamadas de un celular nos muestra el tiempo (en horas:minutos:segundos) la cantidad total de tiempo empleado en las llamadas que hayan realizado (llamadas salientes) y el tiempo total de las llamadas recibidas (llamadas entrantes). Muchos sistemas almacenan los tiempos (horas, minutos y segundos) como una cantidad expresada en segundos. Es así como se almacenará la información de este contador de llamadas. Después de una llamada (entrante o saliente) el respectivo contador debe incrementarse, según los segundos que duró la llamada. Cuando el usuario consulte alguno de los contadores debe visualizar la información en horas, minutos y segundos. Mientras que la representación en segundos queda para uso interno. Es posible también que el usuario reinicie los contadores. El algoritmo: Algoritmo CONTADOR LLAMADAS Clase ContadorLlamadas 1. Datos entrantes : Entero salientes : Entero 2. Método ContadorLlamadas() a. entrantes = 0 Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca b. salientes = 0 3. Fin Método ContadorLlamadas 4. Método incrementarEntrantes (cant : Entero) a. entrantes = entrantes + cant 5. Fin Método incrementarEntrantes 6. Método incrementarSalientes (cant : Entero) a. salientes = salientes + cant 7. Fin Métodos incrementarSalientes 8. Método obtenerEntrantes () : Texto a. Declaraciones Variables salida : Texto b. salida = convertirHHMMSS(entrantes) c. return salida 9. Fin Método obtenerEntrantes 10. Método obtenerSalientes () : Texto a. Declaraciones Variables salida : Texto b. salida = convertirHHMMSS(salientes) c. return salida 11. Fin Método obtenerSalientes 12. Método convertirHHMMSS (tiempo : Entero) : Texto a. Declaraciones Variables horas, minutos, segundos : Entero b. Calcular horas = tiempo \ 3600 c. Calcular tiempo = tiempo MOD 3600 d. Calcular minutos = tiempo \ 60 e. Calcular tiempo = tiempo MOD 60 f. segundos = tiempo g. salida = concatenar(horas + “:” + minutos + “:” + segundos) h. return salida 13. Fin Método convertirHHMMSS 14. Método reiniciarContadores() a. entrantes = 0 b. salientes = 0 15. Fin Método reiniciarContadores Fin Clase ContadorLlamdas Fin A continuación se muestran los programas Java: Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 10 Programa Contador de Llamadas Ilustración 11 Clase que ejecuta el contador de llamadas Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca La salida de la ejecución de la clase EjecutaContadorLlamadas es la siguiente: Ilustración 12 Salida del programa EjecutaContadorLlamadas Análisis: Recuerde que: para el análisis del código Java todas los números de líneas hacen referencia a la Ilustración 90. La clase ContadorLlamadas tiene dos atributos (entrantes y salientes) que se muestran en el punto 1 o en las líneas 13 y 14. Posee un constructor (puntos 2 al 3 o líneas 16 a la 19). Además existen dos métodos incrementar, uno incrementa el contador de llamadas entrantes (puntos desde el 4 hasta el 5 o líneas desde la 21 hasta la 23) y el segundo las salientes (puntos desde el 6 hasta el 7 o líneas desde la 25 hasta la 27). Tanto el método obtenerEntrantes, como el método obtenerSalientes devuelve sus valores en formatos horas, minutos y segundos; para ello deben invocar al método convertiHHMMSS (puntos 8.b y 10.b o líneas 32 y 40) enviando los valores de sus respectivos atributos. El método convertirHHMMSS es el que realiza la mayor cantidad de tareas; lo que hace es convertir la cantidad de segundos en horas (punto 12.b o línea 48), el valor sobrante (punto 12.c o línea 49), se transforma en minutos (punto 12.d o línea 50), el sobrante (punto 12.e o línea 51), se transforma en segundos. Finalmente los valores de horas, minutos y segundos se concatenan para cumplir con el formato requerido. El último método reiniciarContadores encera los atributos a 0. El método EjecutaContadorLlamadas crea un objeto de la clase ContadorLlamadas se incrementa los minutos (líneas 16 y 17) se presentan los valores (líneas 19 y 20), nuevamente se incrementan los contadores (líneas 22 y 23) se presentan los contadores (líneas 25 y 26) y finalmente se reinician los contadores (línea 28) y se presentan los mismos (líneas 29 y 30). Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca 4. Construir una clase calculadora, que permita realizar las cuatro operaciones matemáticas: suma, resta, división y multiplicación. Algoritmo CALCULADORA Clase Calculador 1. Datos num1 : Entero num2 : Entero resultado: Entero 2. Método Sumar() a. resultado= num1+num2; 3. Fin Método Sumar 4. Método Restar() a. resultado= num1-num2; 5. Fin Método Restar 6. Método Dividir() a. resultado= num1/num2; 7. Fin Método Dividir 8. Método Multiplicar() a. resultado= num1*num2; 9. Fin Método Multiplicar 10. Método asignarNum1(numero: entero) a. num1= numero 11. Fin Método asignarNum1 12. Método asignarNum2(numero: entero) a. num2= numero 13. Fin Método asignarNum2 14. Método obtenerResultado(): entero a. return resultado 15. Fin Método obtenerResultado Fin Clase Calculador Fin El programa en Java es el siguiente: Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 13 Clase Calculador Ilustración 14 Clase de prueba de la Clase Calculador Análisis: Tenga presente que: para el análisis del código Java todas los números de líneas hacen referencia a la Ilustración 93. La clase Calculador tiene tres atributos que se muestran en las líneas Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca 37,38 y 39. La clase no cuenta con un constructor definido, pero si cuenta con cuatro métodos sumar, restar, dividir, multiplicar (línea 40, 43, 46 y 49 del código Java) todos los métodos realizan las operaciones indicadas y almacenan el resultado en la variable de salida resultado. La clase Objeto6 permite crear instancias de la clase Calculador e invocar a sus diferentes operaciones, en la línea 12 del código Java se instancia la clase en un objeto denominado objCalculador,. En las líneas 18 y 19 del código Java se asigna valor a los atributos de la clase num1 y num2, mediante los métodos del objeto asignarNum1 y asignarNum2 con los valores ingresados por el usuario. Posteriormente se solicita que el usuario ingrese la operación a realizar que es evaluada mediante una estructura de control switch , que dependiendo de la entrada ser realizan las llamadas a los métodos de la clase como se realiza en las líneas 25, 26, 27 y 28 del código Java de la Ilustración 94. Finalmente se presenta el resultado de la operación, realizando una invocación al método obtenerResultado del objeto objCalculador en la línea 33 del código Java. 5. Construir una clase Numero que tenga atributos cantidad formateada y cantidad no formateada, y un método que permita cambiar una cantidad sin formato a otra con formato de comas cada tres cifras. Algoritmo NUMERO Clase Numero 1. Datos numSinFormato : Entero numConFormato : Cadena 2. Método CambiarNumero() a. numConFormato=insertarComas(numeroSinFormato) b. Fin Método CambiarNumero 3. Método asignarNumSinFormato( numero: entero) a. numSinFormato=numero b. Fin Método AsginarNumSInFormato 4. Método obtenerNumConFormato( ): Cadena a. return numConFormato b. Fin Método obtenerNumConFormato 5. Método insertarComas (cantidad: Entero): Cadena a. Declaraciones Contador, i: Entero cadena, tresCifras,cadenaComas: Cadena b. posición: arreglo[numPalabras] Entero c. Cadena=Cambiar a cadena cantidad d. Posición= cadena.longitud Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca e. numComas=cadena.longitud/3 f. IF cadena.longitud %3!=0) THEN 1. numComas=numComas+1; g. ENDIF h. FOR i=0 ; i<numComas; i++ 1. IF posicion>3 THEN a. tresCifras=cadena.subcadena(posicion-3, posicion); b. cadenaComas=","+tresCifras+cadenaComas; c. posicion=posicion-3 2. ELSE a. tresCifras=cadena.subcadena(0, posicion); b. cadenaComas=tresCifras+cadenaComas; 2. ENDIF i. ENDFOR j. Return cadenaComas; k. Fin de Método insertarComas Fin de la clase Los programas Java se muestran a continuación Ilustración 15 Clase Numero Análisis: Tenga presente que: para el análisis del código Java todas los números Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca de líneas hacen referencia a la Ilustración 95. La clase Numero contiene dos atributos que son numSinFormato y numConFormato (línea 23 y 24 del código Java). El primero contiene un numero entero que nos servirá como entrada en el método insertarComas que tienen como salida una cadena de un número con una coma cada tres cifras. Otros elementos a destacar son que: la clase contiene dos métodos cambiarNumero e insertarComas. El primero hace una llamada a insertarComas y asigna el resultado a la variable numConFormato (línea 26 del código Java). El segundo método recibe como parámetro un entero sin formato y devuelve una cadena. El proceso utiliza algunas variables: cadena (línea 30 del código Java) que almacenará el numero en cadena sin formato, tresCifras (línea 31 del código Java) que temporalmente permitirá agregar una coma cada tres cifras, cadenaComas(línea 32 del programa Java) que contiene la cadena final ya con el formato requerido, posición (línea 34 del programa Java) con la posición de el último indice de la cadena con el fin de iniciar a insertar de derecha a izquierda, numComas (línea 35 del programa Java) que contiene el número de cifras a recorrer para insertar las comas. El proceso en si inicia en la línea 37 con una estructura for, recorriendo toda la cadena. Cada tres cifras se inserta la coma y se corre toda la cadena hacia la izquierda (línea 38 a la 46 del código Java). Seguido se retorna la cadena ya formateada con comas. Finalmente tenemos los métodos para asignar (línea 50) (línea 53) los valores a los atributos. y obtener Hemos llegado al final del presente capítulo, en el cual analizamos los conceptos fundamentales de la POO, estudiamos la manera de como implementar a través de pseudocódigo programas desarrollados bajo esta metodología. También analizamos la forma de representar en Java este tipo de problemas y finalmente revisamos los constructores y su implementación en Java. Con el afán de que amplié sus conocimientos sobre este tema y su representación en Java le proponemos que lea detenidamente el siguiente material adicional. Material adicional: En el CD que se adjuntó en la guía, puede revisar (programación-enjava-i\Contenidos\LecturaObligatoria\) los archivos: 9-objetosyclases.pdf 13-constructores.pdf Una vez concluido el capítulo es el momento de que determine el nivel de Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/). Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca comprensión que alcanzó del mismo, para lo cual le planteamos una serie de preguntas sobre el tema. Recuerde, trate de resolver usted mismo cada una de las preguntas, para luego comparar sus respuestas con las que proponemos al final de la presente guía didáctica. Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial – Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).