Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Carátula para entrega de prácticas Facultad de Ingeniería Laboratorio de docencia Laboratorios de computación salas A y B Profesor: Saavedra Hernández Honorato Ing. Asignatura: Programación Orientada a Objetos Grupo: 1 No de Práctica(s): 4 Integrante(s): Ayala Trejo Albanya Yendalli Téllez González Jorge Luis Méndez Costales Luis Enrique Villamar Cortes Juan Antonio Santana Sánchez María Yvette Zecua Salinas Juan Carlos Téllez González Jorge Luis Villamar Cortes Juan Antonio Zecua Salinas Juan Carlos No. de Equipo de cómputo empleado: 7, 8, 13, 14, 15 y 16. No. de Lista o Brigada: Semestre: 2020-2 Fecha de entrega: 01/03/2020 Observaciones: CALIFICACIÓN: __________ Facultad de Ingenierı́a Programación Orientada a Objetos Índice 1. Introducción 2 1.1. El concepto de Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2. Clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3. Instancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4. Mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Métodos 3 2.1. Sobrecarga de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2. Métodos de clase (static) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3. Constructores 10 3.1. Destructor de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4. Conclusiones 12 1 Facultad de Ingenierı́a Programación Orientada a Objetos 1. Introducción 1.1. El concepto de Objeto Corresponde a la instancia individual de una clase. Los objetos creados a través de una clase ’plantilla’. Po- seen los atributos y métodos definidos por la clase creadora. Además, sus valores son individuales para cada objeto creado. Pueden crearse tantos objetos como sean necesarios en un determinado marco de recursos de Hardware. 1.2. Clase En el mundo real existen varios objetos de un mismo tipo, o de una misma clase, por lo que una clase equi- vale a la generalización de un tipo especı́fico de objetos. Una clase es una plantilla que define las variables y los métodos que son comunes para todos los objetos de un cierto tipo. Una clase es la implementación de un tipo abstracto de datos y describe no sólo los atributos (datos) de un objeto sino también sus operaciones (comportamiento). Figura 1: Las clases son los planos sobre los cuales se costruyen objetos. 1.3. Instancia Una instancia es un elemento de una clase (un objeto). Cada uno de los objetos o instancias tiene su propia copia de las variables definidas en la clase de la cual son instanciados y comparten la misma implementación de los métodos. Sin embargo, cada objeto asigna valores a sus atributos y es totalmente independiente de los demás. En Java para crear una instancia se utiliza el operador new seguido del nombre de la clase y un par de paréntesis. Figura 2: Sintaxis de creación de una instancia. 2 Facultad de Ingenierı́a Programación Orientada a Objetos Mientras que en Python para saber si un objeto es una instancia de una clase se utiliza la función isinstance(). Figura 3: Declaración y ejemplo de instancia en Python. 1.4. Mensajes Los objetos interactúan enviándose mensajes unos a otros, tras la recepción de un mensaje el objeto actuará. La acción puede ser el envı́o de otros mensajes, el cambio de su estado, o la ejecución de cualquier otra tarea que se requiera que haga el objeto. Los objetos de un programa interactúan y se comunican entre ellos por medio de mensajes. Cuando un objeto A quiere que otro objeto B ejecute uno de sus métodos, el objeto A manda un mensaje al objeto B. Figura 4: Envı́o y recepción de mensajes entre objetos. En Java para que un objeto ejecute algún método se utiliza el operador punto: Figura 5: Operador punto de acceso a métodos definidos para un objeto. 2. Métodos Definen el comportamiento general de un objeto, es decir, modelan las capacidades y operaciones que pueden realizarse con un determinado tipo de objeto. Por ejemplo, una clase de bicicletas entre sus métodos 3 Facultad de Ingenierı́a Programación Orientada a Objetos puede tener el ”pedalear”, ”frenar”, etc. A continuación se procede a crear un proyecto denominado PuntoPrueba por medio del IDE Net- Beans. El proyecto incluye un paquete con el mismo nombre y su clase principal junto con otra creada denominada Punto: La clase principal PruebaPunto no posee atributos declarados. Dentro de su método main se instancia a la clase Punto, creando un objeto llamado p de tipo Punto. A continuación, al objeto p en su atributo x se le asigna el valor 5 y en su atributo y se le asigna el valor de 8. Finalmente, se imprimen las coordenadas de p usando el método imprimePunto de la clase Punto. Una vez realizado lo anterior, se vuelven a crear un objeto de tipo Punto con los valores de ambos atributos con los valores de 7 y 2, respectivamente. Una vez más, se imprimen las nuevas coordenadas de x. Figura 6: La clase tiene como objetivo probar a la clase Punto y verificar su correcta implementación. La clase Punto: su objetivo es implementar coordenadas. Define a los atributos x, y, para después imprimirlos con su formato respectivo. Esta función no recibe ningún parámetro ni devuelve ningún valor. Los atributos x, y representan en el ejemplo, los valores de un punto en el plano cartesiano de R2. El método imprimePunto se encarga de imprimir los valores x, y de un objeto de tipo Punto en formato de pares coordenados. Figura 7: Estructura de la clase Punto. Se observa el formato con el que se imprime los pares coordenados. 4 Facultad de Ingenierı́a Programación Orientada a Objetos La salida obtenida al ejecutar el programa en NetBeans es la siguiente: Figura 8: La clase principal PruebaPunto es una clase Cascarón de la clase Punto. Consideraciones: 1. Un proyecto incluye un package o paquete, el cual agrupa clases que pertenecen a un entorno en común. Para agregar nuevas clases a un proyecto de NetBeans únicamente se hace click derecho sobre el paquete objetivo −> new−> Java Class. 2. Esta clase, al encontrarse en un mismo paquete, será visible para el resto de clases presentes en el proyecto. Figura 9: Creación de nuevas clases en un proyecto de NetBeans. 3. En un programa en Java, las instrucciones que se ejecutan en un inicio son aquellas que se encuentran en el método main. Las clases NO se ejecutan hasta que son llamadas para crear un objeto de su tipo o ejecutar alguno de sus métodos definidos. Figura 10: Breakpoint presente en la clase principal: la lı́nea marcada es la primera en ejecutarse. 4. NetBeans dispone de un debugger que permite observar y analizar la creación de variables, referen- cias, objetos y llamadas a métodos. 5 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 11: Estado del debugger en el punto marcado anteriormente. A continuación, se añade otro breakpoint en la lı́nea 7 de ClasePrueba para observar la creación del objeto p y se avanza en la ejecución del programa con el botón Step Out ubicado en la barra superior de herramientas: Figura 12: Estado del debugger: nótese que p ya aparece marcado como un objeto.. Los métodos en Python podemos dividirlos en tres: 1. Método de instancia. 2. Método de clase. 3. Método Estático. Para esta práctica solo nos interesa los dos primeros métodos, es decir instancia y clase, puesto que el último son funciones que no tienen porqué tener relación con ninguna clase o instancia. Figura 13: Métodos en Python. 6 Facultad de Ingenierı́a Programación Orientada a Objetos Hay que hacer una especial mención a la lı́nea que contiene @classmethod esto se efectúa en Python cuando deseamos usar un método sin tener la necesidadde instanciar como hacemos al usar el self, se podrı́a ver como una forma de ahorrar código. Figura 14: Clase Punto implementada en Python. Figura 15: Creación de objetos de tipo Punto. 2.1. Sobrecarga de métodos La sobrecarga de métodos hace que un mismo nombre pueda representar distintos métodos con distinto tipo y número de parámetros, manejados dentro de la misma clase. En el ámbito de la POO, la sobrecarga de métodos se refiere a la posibilidad de tener dos o más métodos con el mismo nombre pero distinta funcionalidad. Es decir, dos o más métodos con el mismo nombre realizan acciones diferentes y el compilador usará una u otra dependiendo de los parámetros usados. Esto también se aplica a los constructores (de hecho, es la aplicación más habitual de la sobrecarga). Con el fin de probar el concepto anterior, se crea un nuevo proyecto denominado PruebaTriangulo, el cual contiene su paquete homónimo y dos clases: La clase principal PruebaTriangulo, al igual que en el ejemplo anterior de métodos, no contiene atributos declarados, pero posee un único método, el método main. Dentro de la función principal se 7 Facultad de Ingenierı́a Programación Orientada a Objetos crea una objeto de tipo Triangulo, y, a continuación se instancia con ayuda del operador “.”, y se le asignan valores a los atributos de la clase Triangulo, y los imprime de manera directa sin ayuda, aùn de ningún método de la clase Triangulo. Una vez hecho esto, se imprimen valores de los atributos de Triangulo, pero ahora con ayuda de cada uno de los métodos de la misma. Se hace notar que el nombre de los tres métodos es el mismo, pero a cada uno se le pasan diferentes argumentos, y eso es lo que los diferencı́a entre sı́. Figura 16: Estructura general de la clase principal pruebaTriangulo.. Ahora, por otro lado, en la clase Triangulo, lo primero que se hace es declarar los atributos, de tipo float, base y altura. También, se declaran los métodos sobrecargados “area”, de tipo float y públicos. En el primero de estos métodos, observamos que no se solicitan parámetros para llevar a cabo la función, y que los datos, los toma directamente de los atributos de la misma clase, por lo que al utilizar este método en alguna otra clase, deberá crearse una instancia de Triangulo definiendo valores para los dos atributos. Tanto en el segundo método como en el tercero, se solicitan los parámetros base y altura, que se utilizan en las instrucciones dentro de los mismos. La única diferencia entre estos dos métodos, es que el tipo de dato de los parámetros del segundo es de reales y del tercero, los tipos de datos son enteros. 8 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 17: Estructura general de la clase Triangulo.. Al correr el programa, vemos como se llevan a cabo las instrucciones indicadas en el método main de la clase PruebaTriangulo. Para empezar, se imprimen ambos atributos, base y altura, declarados y refe- renciados a Triangulo. Ahora, a continuación se observa la salida de cada una de los métodos sobrecargados, que tambien están referenciados, al igual que los atributos, a la clase Triangulo de objeto “ triangulo” creado previamente. Figura 18: Salida obtenida con el programa anterior. Figura 19: Sobrecarga de métodos en Python. 9 Facultad de Ingenierı́a Programación Orientada a Objetos 2.2. Métodos de clase (static) Este tipos de métodos no actúan con el objeto con el con el operador punto, lo cual permite recibir argu- mentos pero no utilizar la referencia “this”. Para llamar a estos métodos o atributos se coloca la pàlabra “static” antes de colocar su tipo y nombre designado. Figura 20: Atributo estático PI. En este ejemplo, para obtener el área de un cı́rculo, se necesita PI el cual siempre va a tener el mismo valor, por lo tanto es conveniente hacer de él un atributo estático “static”. Estos métodos o atributos pueden ser utilizados en otras clases, pero si en una de estas modifica el valor, automáticamente cambiará a ese valor para todos los objetos de esa clase. Figura 21: Método estático en Python. 3. Constructores Los constructores son métodos que tiene el mismo nombre que la clase y su función es inicializar los atributos de un nuevo objeto. Cuando se crea un objeto este se inicializa automáticamente. Un constructor por default es aquel parámetros e inicializa lo s atributos por defecto. Las reglas para los constructores son: El constructor tiene el mismo nombre que la clase. Puede no contener ningún parámetro o tener más de uno. 10 Facultad de Ingenierı́a Programación Orientada a Objetos No devuelve ningún valor. Toda clase debe tener al menos un constructor. Un constructor por default es el siguiente: Figura 22: Constructor por default para la clase Punto en Java. Figura 23: Constructor por default para la clase Punto en Python. En el siguiente caso se encuentran dos constructores distintos, uno pasa los valores por defecto y el otro los pasa por medio de parámetros, como se muestra en el siguiente ejemplo: Figura 24: Constructores con diferentes parámetros de entrada. 3.1. Destructor de objetos Los objetos se asignan dinámicamente, cuando se destruyen es necesario saber si la memoria quedó liberada, para la creación de nuevos. Como se sabe, en otros lenguajes de programación se tienen operadores para hacer liberación de memoria. En el caso particular de Java no se cuenta con tales operadores, pero cuenta con una herramienta denominada “garbage collector”, que se encarga de liberar la memoria automáticamente. El control de esta herramienta no es posible, sin embargo, se puede recurrir al método “finalize()”, lo cual es lo más parecido a un destructor en Java. Como en Java, Python cuenta con un recolector de basura que maneja la administración de basura automáticamente, aunque si se quiere hacer de forma manual se puede hacer con el siguiente método: 11 Facultad de Ingenierı́a Programación Orientada a Objetos Figura 25: Destructor aplicado en Python. Figura 26: Después de destruir el objeto e intentar llamarlo, el intérprete marcará error. 4. Conclusiones En la actual práctica hemos podido observar las declaraciones de instancias y clases para poder utilizarlas de manera correcta dentro del lenguaje sea Java o Python. Además de lo anterior mencionado se ha visto temas como mensajes, pues los objetos sin comuni- carse entre ellos no tendrı́an ningún sentido, otro tema digno de mención son las sintaxis de los diferentes tipos de métodos, ası́ como el constructor que es muy importante en Java este concretamente se ha desa- rrollado de forma breve y concisa para explicar los puntos más destacados del mismo, esto nos facilita determinar su importancia dentro del lenguaje y del propio paradigma de programación orientada a objetos. Finalmente podemos afirmar que los objetivos de la practica se cumplieron de manera satisfactoria, esto podemos notarlo al leer detenidamente la presente práctica. 12 Facultad de Ingenierı́a Programación Orientada a Objetos Referencias [1] Clases y objetos. Recuperado de: http://lcp02.fi-b.unam.mx/static/docs/PRACTICAS_POO/ poo_p4.pdf. Fecha de consulta: 29/02/2020. [2] Sobrecarga de métodos. Recuperado de: http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/ libro15/26_sobrecarga_de_mtodos.html. Fecha de consulta: 29/02/2020. Los créditos de las fotografı́as pertenecen a sus respectivos autores. c© LATEX 13 http://lcp02.fi-b.unam.mx/static/docs/PRACTICAS_POO/poo_p4.pdf http://lcp02.fi-b.unam.mx/static/docs/PRACTICAS_POO/poo_p4.pdf http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro15/26_sobrecarga_de_mtodos.html http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro15/26_sobrecarga_de_mtodos.html
Compartir