Logo Studenta

Práctica 4 V2

¡Este material tiene más páginas!

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

Continuar navegando

Materiales relacionados

12 pag.
Práctica 7 V2

UNAM

User badge image

Jorge Luis Tellez

23 pag.
Semana-3---Clases-en-java

UBAM

User badge image

Contenidos Muy Locos

31 pag.