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

Unidad 9

Cargado por

Pablo A. Rojas
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, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
27 vistas77 páginas

Unidad 9

Cargado por

Pablo A. Rojas
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, TXT o lee en línea desde Scribd

FUNDAMENTOS DE LA

PROGRAMACIÓN

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 2

MÓDULO 3 - UNIDAD 9

Programación Orientada a Objetos

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 3

Presentación:

Con esta Unidad 9 comenzamos con el Módulo 3 del curso, que va a estar enfocada en el
paradigma de Programación Orientada a Objetos (POO).

Comenzamos analizando los principales componentes del paradigma, mostrando las


principales diferencias con el paradigma Estructurado, aunque también reutilizando
muchos de los conceptos vistos anteriormente.

Posteriormente comenzaremos a analizar los principios que rigen el paradigma, tarea que
finalizaremos en la próxima Unidad.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 4

Objetivos:

Que los participantes:


 Obtengan los primeros conceptos del paradigma de Programación Orientada a
Objetos (POO)
 Incorporen los conceptos de clase, objeto, métodos y atributos
 Incorporen los conceptos de los dos primeros principios que hacen a la Orientación
a Objetos (OO): abstracción y encapsulamiento

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 5

Bloques temáticos:

1. El paradigma Orientado a Objetos

2. Clases

3. Objetos

4. Métodos y atributos

5. Principios de la OO: Abstracción

6. Principios de la OO: Encapsulamiento

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 6

Consignas para el aprendizaje colaborativo

En esta Unidad los participantes se encontrarán con diferentes tipos de actividades que,
en el marco de los fundamentos del MEC*, los referenciarán a tres comunidades de
aprendizaje, que pondremos en funcionamiento en esta instancia de formación, a los
efectos de aprovecharlas pedagógicamente:

 Los foros proactivos asociados a cada una de las unidades.


 La Web 2.0.
 Los contextos de desempeño de los participantes.

Es importante que todos los participantes realicen algunas de las actividades sugeridas y
compartan en los foros los resultados obtenidos.

Además, también se propondrán reflexiones, notas especiales y vinculaciones a


bibliografía y sitios web.

El carácter constructivista y colaborativo del MEC nos exige que todas las actividades
realizadas por los participantes sean compartidas en los foros.

* El MEC es el modelo de E-learning colaborativo de nuestro Centro.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 7

Tomen nota

Las actividades son opcionales y pueden realizarse en forma individual, pero siempre es
deseable que se las realice en equipo, con la finalidad de estimular y favorecer el trabajo
colaborativo y el aprendizaje entre pares. Tenga en cuenta que, si bien las actividades
son opcionales, su realización es de vital importancia para el logro de los objetivos de
aprendizaje de esta instancia de formación. Si su tiempo no le permite realizar todas las
actividades, por lo menos realice alguna, es fundamental que lo haga. Si cada uno de los
participantes realiza alguna, el foro, que es una instancia clave en este tipo de cursos,
tendrá una actividad muy enriquecedora.

Asimismo, también tengan en cuenta cuando trabajen en la Web, que en ella hay de todo,
cosas excelentes, muy buenas, buenas, regulares, malas y muy malas. Por eso, es
necesario aplicar filtros críticos para que las investigaciones y búsquedas se encaminen a
la excelencia. Si tienen dudas con alguno de los datos recolectados, no dejen de consultar
al profesor-tutor. También aprovechen en el foro proactivo las opiniones de sus
compañeros de curso y colegas.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 8

1. El paradigma Orientado a Objetos


Como lo indica el hecho de ser un paradigma, la orientación a objetos (o programación
orientada a objetos, de ahora en más indistintamente POO u OO), está relacionado con
cómo hacer las cosas por sobre cómo funcionan las cosas. Dicho de otra manera, está
relacionado a ciertas prácticas con sustento teórico por sobre las herramientas en las
cuales se implementan estas prácticas.

Veremos a lo largo de este Módulo cómo se reutilizarán muchos de los conceptos del
Módulo anterior, ya que, tanto en la programación estructurada como en la POO, las
estructuras condicionales, las iterativas, el uso de la indentación, entre otras, siguen
estando presentes. También veremos que existen similitudes conceptuales con respecto a
otros temas vistos, como las funciones, aunque con nombres, usos y conceptos de base
distintos.

Como dijimos antes, la OO (como concepto) no tiene que ver con las herramientas en sí,
aunque nos permitiremos algunas licencias relacionadas a implementaciones puntuales
con el fin de presentar ejemplos similares a los del día a día laboral de un profesional de
la programación. Estas licencias estarán orientadas a permitir una transición simple y
natural a las implementaciones de los lenguajes de POO más difundidos en el mercado
(Java, C/C++/C#, entre otros) reduciendo la brecha de conocimiento y la curva de
aprendizaje, a la vez que se mantienen sólidos fundamentos teóricos.

Dentro de la OO, los Objetos en sí son representaciones de distintos aspectos de la


realidad. Como venimos diciendo, uno de los objetivos de la programación en general es
modelar una realidad con el fin de resolver un problema. En este caso, los objetos
cumplen este concepto a la perfección, por sus características y su concepción.

Por lo tanto, podemos decir que los objetos son las entidades que modelan esa realidad y
tienen un estado, comportamiento e identidad particulares.

- El estado de un objeto se compone de los datos que puede contener a través de


atributos o propiedades.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 9

- El comportamiento de un objeto está dado por todas aquellas acciones que un


objeto puede realizar, y que se encuentran definidas por los métodos o mensajes
que puede enviar. Dicho de otra forma, son las operaciones (en general, no
solamente aritméticas) que puede realizar un objeto.

Los conceptos de atributo/propiedad y método/mensaje los veremos más adelante en esta


misma Unidad.

- La identidad de un objeto es un identificador que lo hace único. Este concepto será


recursivamente retomado en todo el Módulo.

La complejidad de la OO pasa por un “forma de pensar” los problemas, término que


repetíamos al comienzo de curso, y que está relacionada con la subjetividad de quien
programa: la manera en la que hace las cosas y pueden ser diferentes entre distintos
programadores, aunque siempre debe estar regida (esta forma de pensar) por el sentido
común, la simplicidad y ciertas las buenas prácticas. Programar orientado a objetos no es
lo difícil. Difícil es programar bien. Y programar bien es importante ya que de esta forma
podemos explotar mejor todas las ventajas de la POO.

Pensar en términos de objetos es muy parecido a cómo concebimos y percibimos lo que


nos rodea en la vida real. Vamos a pensar (sin intentar ser demasiado originales en el
ejemplo) en un auto, para tratar de modelarlo en Objetos. En forma narrativa, podemos
decir que "auto" es el elemento principal de interés, que engloba toda nuestra
problemática, y que a la vez tiene una serie de particularidades: color, modelo o
marca, entre otros. Además, puede realizar una serie de acciones: ponerse en
marcha, frenar, estacionar, etc.

En POO el auto sería el objeto, los atributos serían las características como el color o el
modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o
frenar, temas que veremos en detalle a continuación.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 10

Otro ejemplo podría tratar de modelar en OO una fracción, es decir, esa estructura
matemática que tiene un numerador y un denominador que divide al numerador, por
ejemplo 1/2. En este caso, la fracción es el objeto y tiene dos atributos, el numerador y
el denominador. Posteriormente podría definir varios métodos que modifican su
comportamiento, como simplificarse, sumarse con otra fracción, restarse con otra fracción,
o cualquier otro que tenga sentido para una fracción.

Estos objetos se podrán utilizar en los sistemas, por ejemplo, en un programa de


matemáticas se podría hacer uso del objeto fracción y en un programa que gestione un
concesionario se podrá utilizar el objeto auto. Los sistemas OO utilizan muchos objetos
para realizar las acciones que se desea realizar y ellos mismos también son objetos. Es
decir, el concesionario de autos será un objeto que utilizará objetos autos, vendedores,
formularios, etc.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 11

2. Clases
Si bien venimos hablando de objetos, existe un artefacto "anterior" (viendo la POO como
una secuencia de conocimientos) que es necesario conocer: la clase.

Comenzaremos con una famosa y muy difundida definición que nos permitirá comprender
las diferencias entre clase y objeto:

“Un objeto es una instancia de una clase”

Esta definición, nos dice que primero existe la clase y que a partir de ella se crean los
objetos. Aquí podríamos hacer un paralelismo diciendo que una clase es un molde y el
objeto es el producto moldeado.

En OO, tiende a quedar en desuso el concepto de “programa” (como


ente que agrupa código fuente, algoritmos, etc.), siendo reemplazado
por el concepto de clase.

A continuación, veremos un ejemplo de una clase, continuando con el ejemplo del auto.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 12

A simple vista podemos observar algunas diferencias con lo que veníamos viendo hasta
ahora en Estructurado:

 Vemos que introducimos nuevas palabras reservadas:

o “clase”, “fin clase”

o “metodo”, “fin metodo”

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 13

 Eliminamos:

o en la declaración de atributos (antes variables) el uso de la palabra


reservada “var”.

o además de "programa", "inicio" y "fin".

 El nombre de la clase (antes era un programa, ahora es una clase) se escribe por
convención en UpperCamelCase.

 No tenemos variables de "tipo primitivo" (integer, string, etc.). Si bien la mayoría de


los lenguajes de POO implementan los tipos primitivos, de momento haremos
honor a que “en objetos, todo es objetos”.

Una variable de "tipo primitivo" nos permite guardar un dato, por


ejemplo: var string lugar = "Madrid"

En la variable "lugar" solo podemos guardar un único dato. En un


arreglo, ocurre algo similar: solo podemos guardar datos. Pero en POO, en cada
Objeto no solo vamos a poder guardar datos (en los atributos) sino tener
comportamiento, acciones (en los métodos). Y, además, ¡vamos a poder crear
nuestros propios Objetos para lo que necesitemos!

 Aquí comenzaremos con algunas de las licencias que dijimos que nos tomaríamos:
vamos a dar por sentado (como ocurre en la realidad) que algunas cuestiones
básicas vienen dadas por los lenguajes. Por ejemplo: si queremos asignar una
cadena de caracteres, no vamos a preocuparnos de tener que bajar a nivel de
lenguaje de máquina para pedir una composición de bit y bytes, etc. Simplemente
daremos por hecho que los lenguajes (en nuestro caso, un pseudocódigo) ya nos
proveen alguno de estos elementos básicos. Por lo que mantendremos nuestros
tipos de datos, sólo que los usaremos en para nombrarlos el UpperCamelCase
para indicar que son clases. Por eso, tendremos disponibles estas clases: String,
Integer, Boolean, Date y Float. Que “modelan” cadenas de caracteres, números
enteros, valores binarios: verdadero y falso, fechas y números con decimales.

 Seguimos manteniendo 2 secciones:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 14

o En la superior o inicial se definirán todos los atributos (antes eran


"variables") de la clase

o Posteriormente se definirán los métodos (antes eran "funciones") de la clase


(antes era "programa")

 Finalmente, vemos que los atributos fueron declarados como clases. Vemos que
son 2:

o Color

o Marca

Por lo que tenemos estas otras dos nuevas clases que deberíamos escribir, para que el
ejemplo esté completo.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 15

Ambos casos son similares. Podemos ver que lo que antes se trataba de tipo de dato
primitivo ("color" y "marca", ahora se convierte en un objeto. Ambos objetos tienen un
atributo que define su característica y dos métodos: el primero utilizado para cambiar el
color y el segundo para devolver el color actual del auto. Más adelante, en esta misma
Unidad, veremos más detalles sobre el uso de atributos y métodos.

También vemos que los atributos (antes variables) se definen de una manera particular,
no tan simple a cómo se creaban variables en Estructurado:

Donde tenemos:

 "String" es el tipo de dato del atributo. Es la CLASE a partir de la cual se crea el


objeto
 "marca" es EL objeto

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 16

 "nuevaInstancia" se utiliza para aclarar que se está creando un objeto


 "String()" es el Constructor (ya veremos de qué se trata esto) usado para crear el
objeto

Sobre los métodos:

Se declara un método llamado "definirMarca" que recibe como parámetro un tipo "String".
Dentro del método se asigna el valor del parámetro "marcaNueva" al atributo de clase
"marca". Importante: deben coincidir los tipos (la clase del parámetro y la clase con se
declaró el atributo) para que no haya conflictos de tipos de datos (lo mismo que ocurría en
Estructurado).

En este caso vemos un método llamado "devolverMarca" que no recibe parámetros, pero
sí devuelve un valor del tipo String. En este caso, devuelve el valor del atributo "marca".

Más adelante, en esta Unidad, veremos más en profundidad todos estos conceptos,
incluida la creación de atributos.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 17

3. Métodos y Atributos
Como ya dijimos, un método o "mensaje" es la analogía en OO a las funciones del
paradigma estructurado. Su objetivo es darle comportamiento a un objeto a través de la
ejecución de instrucciones de negocio, en el sentido de “hacer algo” para lo cual fue
concebida la clase que viene a resolver un problema en particular, de un “negocio”
(industria, sector, conocimiento, etc.) en particular. Además, modifican los atributos de un
objeto, cambiando su estado.

Los métodos devuelven un único valor (o ninguno) y reciben una cantidad ilimitada
de parámetros, dependiendo de la implementación del lenguaje en particular.

Se suele decir que un método es “invocado” o “llamado”, indistintamente cuando es


utilizado.

También existen métodos especiales llamados constructores, que en lenguajes como


Java, .NET o C++ reciben el mismo nombre que la clase, aunque estos no están
presentes en todos los lenguajes OO. Más adelante, en esta unidad ampliaremos este
concepto.

Los atributos o propiedades de un objeto conforman el estado del mismo. Estos, a su vez,
deberían ser siempre objetos, desde el punto de vista más purista de la POO, aunque
existen lenguajes híbridos (como Java) que permiten definir atributos de tipos primitivos.

Otra de las premisas, es que los atributos nunca deberían ser accedidos en forma
directa, aunque sea posible hacerlo. La forma de accederlos o modificarlos debería
ser a través de métodos. Estos métodos especiales que reciben el nombre de getters y
setters, en inglés, normalmente traducidos como “obtener” (del “get”, en inglés) y
“asignar”, (del “set”, en inglés) aunque sin difusión en su forma traducida.

Como regla general, los métodos setters y getters tienen las siguientes características:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 18

Getter Setter

Recibe parámetros Sólo uno, para modificar un único


No
atributo
Devuelve valores Sí, del atributo al que
No
corresponde

Un ejemplo de implementación de estos getters y setters es el siguiente:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 19

Tanto los atributos como los métodos se acceden o invocan a


través del operador punto (".")

Siguiendo con el último ejemplo:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 20

 Las expresiones "miClub.nombre" y " miClub.obtenerNombre()" son equivalentes:


se ambos se obtiene el valor del atributo "nombre".
o Si bien ambas instrucciones tienen la misma función, la forma correcta de
obtener el valor de un atributo sería a través del método.

 Vemos que ambos casos se utiliza el operador punto (".") para conectar el objeto
("miClub") con el atributo ("nombre") y el método ("obtenerNombre()")

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 21

4. Objetos
Dijimos que un objeto es una instancia de una clase. ¿Qué significa esto? Que la clase en
sí no tiene comportamiento ni estado, sino que lo tiene el objeto. Y que, a partir de la
clase, con una instrucción en particular, creamos objetos, que son los que tienen
estado y comportamiento. Una clase es un conjunto de instrucciones. Aunque también
es cierto que para crear una instancia de una clase necesitamos instrucciones. Y un
mecanismo para realizar esa creación.

A continuación, veremos un ejemplo de creación de instancias (objetos) a partir de las


clases que definimos arriba.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 22

Supongamos que tengo una clase principal, de ejemplo, que requiere crear dos autos y
asignarle distintos colores y marcas a cada uno. Para eso definiremos la clase
“EjemploAuto”, pero primero ampliaremos el desarrollo de la clase Auto, definiendo el
comportamiento, completando la estructura básica que habíamos visto antes.

Aquí completamos la implementación de la clase Auto, definiendo el comportamiento a


través de los métodos antes definidos.

Ahora, analizaremos la clase de ejemplo, que utiliza las 3 clases vistas ahora (la nueva de
Autos y las dos anteriores de Color y Marca, que no cambiaron).

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 23

Vamos por partes:

- “metodo EjemploAuto()”

o Cuando un método tiene el mismo nombre que la clase (incluidas


mayúsculas y minúsculas) pasa a llamarse “constructor”. Esos métodos
(puede haber más de uno por clase) nunca devuelven valores y son los
primeros que se ejecutan (y se ejecutan siempre) cuando una clase es
instanciada, o sea, cuando se crea un objeto. Este método se suele
utilizar para inicializar el objeto: asignarle características “por default” o
realizar alguna acción en particular. En nuestro caso, queremos que cada
vez que se instancia a la clase “EjemploAuto” se ejecute esa porción de
código. En el caso de la clase "Auto" vemos cómo se usa su constructor
para darle un valor inicial al atributo "costo": esto sucede cada vez que se
instancia (crea un objeto) a partir de la clase "Auto".

- “Auto primerAuto nuevaInstancia Auto()”

o En esta instrucción se crea un objeto a partir de la clase Auto, y se hace


utilizando el constructor defecto ("Auto()"). Lo mismo ocurre cuando se
instancian “primerAutoColor”, “segundoAutoMarca”, etc.

- “Marca auxMarca nuevaInstancia Marca()”

o Este objeto del tipo Marca y su similar de tipo Color se crean como objetos
temporales.

- "primerAutoMarca.definirMarca(“VW”)"

o En este caso, le damos un valor a "primerAutoMarca" a través de la


invocación del método "definirMarca(String)". A ese método le enviamos un
valor tipo String fijo "VW"

- "auxMarca = primerAutoMarca"

o Luego, asignamos el objeto del tipo Marca llamado "primerAutoMarca" a un


objeto auxiliar llamado "auxMarca".

- “primerAuto.definirMarca(auxMarca)”

o Caso similar al anterior, estamos enviando un objeto de tipo Marca llamado


auxMarca creado en el punto anterior, con un valor determinado, a la

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 24

primera instancia de la clase Auto, llamada “primerAuto” a través de uno de


sus métodos, llamado “definirMarca”. Este método (ver clase Auto) recibe un
único parámetro de tipo Marca, que es lo que le estamos enviando y no
devuelve valores (ésta es la diferencia esencial con la instrucción anterior).

o En el caso primerAutoColor se realizar una operatoria similar.

o En la segunda parte del ejercicio, se realizar una operación similar, aunque


se evita el uso de objetos auxiliares.

En este ejemplo vimos cómo se crearon dos instancias de la clase Auto y cómo a cada
una se le asignaron valores distintos de color y marca, utilizando las clases Color y Marca,
respectivamente.

A continuación, podemos ver un ejemplo de uso de diversos constructores (tomando


como base el ejemplo anterior):

Repasamos la definición: un constructor es un método especial,


que se llama exactamente igual que la clase que lo contiene, no
devuelve valores, se ejecuta siempre que se crea un objeto y se
utiliza cuando se instancia una clase.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 25

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 26

Cuando se quisiera instanciar esta clase, se haría a través del uso de la sentencia

“… nuevaInstancia Auto(color, marca)”

Siendo “color” y “marca” instancias de esas clases creadas anteriormente.

En ambos casos creo instancia de la clase "Auto", o sea, 2 objetos:

 autoPorDefault
 autoParametrizado
Luego, invoco al método "calcularPrecio" de cada objeto.

La diferencia entre ambos objetos será que el primer auto ("autoPorDefault") no tiene
características propias, lo que sí ocurre con el segundo auto ("autoParametrizado") que
tiene el color y la marca establecidos.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 27

¿Por qué la clase "Auto" tiene dos atributos de tipo "Marca" y "Color" y no son de
tipo "String"?

El modelo de Programación Orientada a Objetos nos hace pensar en ENTIDADES. El


programador debe identificar cuáles son las entidades importantes y cómo deben ser
modeladas.

En el ejemplo del Auto, se considera que Marca y Color son elementos que se puede
llegan a destacar y pueden requerir, por ejemplo, tener su propia lógica de negocio: un
comportamiento propio, estado propio: métodos y atributos, no solamente un dato.

Pensemos en el dato "CUIL" (Código Único de Identificación Laboral, en Argentina). Es


un código formado por 2 cifras numéricas, luego un número de 10 cifras (normalmente) y
finalmente otro número de 2 cifras, separados estos tres con guiones. Entonces, se
podría pensar como un dato tipo String (por la presencia de los caracteres alfanuméricos
"-"), por ejemplo:

Como un dato para identificar unívocamente a un cliente, es suficiente y está bien.

Pero ¿qué pasa si somos la ANSES (*)?

Sabemos que el CUIL tiene un dígito verificador, por lo tanto, ¿podemos validar si un
CUIL es válido o no, ¿verdad?

Siguiendo la lógica anterior, podríamos hacer:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 28

Para esto, vamos a necesitar una clase "Validador" que tenga el método
"hacerValidacionDeCUIL".

Es una alternativa.

¿Cuál podría ser otra? Que el CUIL sepa validarse así mismo (desde el punto de vista de
objetos, es la opción más correcta).

Por lo tanto, en lugar de tener una clase "Validador" que tenga el método
"hacerValidacionDeCUIL", se puede crear la clase CUIL que tenga ese método. Por
ejemplo:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 29

Y luego:

En este contexto el CUIL, como dato, toma una relevancia mayor, por lo que deja de ser
un simple String a convertirse en una entidad en sí misma, con estado y con
comportamiento.

Entonces, ¿cómo se distingue qué es un dato simple y qué una entidad? Bueno, esto va
a depender del ámbito del problema en cuestión. De la abstracción y lo que el
programador entienda que es relevante y merece ser tratado de forma distintiva y qué
no.

(*) La ANSES, en Argentina, otorga jubilaciones y pensiones, asignaciones familiares a los


trabajadores en actividad y jubilados, subsidios familiares, prestaciones por desempleo,
financiadas por el Fondo Nacional de Empleo, e implementar diversos programas de Seguridad
Social. Es la encargada, también, de gestionar los CUIL.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 30

5. Principios de la OO: Abstracción


Veremos en esta Unidad y en las siguientes los principios más importantes que rigen el
paradigma OO. El primero que explicamos, la abstracción, y se trata de la “habilidad” de
aislar un componente de su contexto o de otros componentes relacionados.

Podemos decir que se trata de un proceso subjetivo por el cual un programador modela
un objeto destacando sus datos más relevantes, dejando de lado aquellos que no aportan
valor al problema que se busca solucionar. Obviamente va a depender de la visión,
información disponible y parcial con la cual se depura un objeto, moldeándolo para el fin
que se cree que va a ser utilizado.

Por ejemplo, si tuviéramos que construir nuestro sistema para una concesionaria,
podríamos modelar el objeto Auto de las siguientes formas:

Ambas clases muestran atributos de autos. En la primera podemos ver algunos que
tendrían sentido en el contexto de una concesionaria. El segundo ejemplo también tiene
datos válidos de auto, aunque más similar a los que necesitarían en un taller.

No da lo mismo tener una “mega clase” con los atributos de ambos, ya que no estaríamos
cumpliendo con la premisa de la abstracción.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 31

6. Principios de la OO: Encapsulamiento


Otros de los principios que rigen la OO es el encapsulamiento. Su utilidad radica en la
simplificación del manejo de la complejidad, ya que nos permite crear objetos como “cajas
negras” donde sólo se conoce el comportamiento, pero no los detalles de implementación.
Esto permite enfocarse en (y conocer) qué hace el objeto en lugar de cómo lo hace,
facilitando su uso.

También permite ocultar el estado, definido por los atributos, de un objeto de manera que
sólo se puede cambiar mediante las operaciones explícitamente definidas para ese
objeto. De esta forma se restringe el comportamiento, a la vez que se eleva el nivel de
seguridad, al asegurarnos que un usuario de nuestra clase (otro programador) acceda al
estado del objeto a través de los medios destinados puntualmente a esos fines.

Las formas se encapsular se pueden definir como:

 Estándar o predeterminado
 Abierto: el objeto puede ser modificado y accedido desde afuera de la clase
 Protegido: el objeto sólo puede ser accedido desde la misma clase (auto
referencia) o por clases que la heredan (ampliaremos el concepto de Herencia en
las próximas Unidades)
 Cerrado: el objeto sólo puede ser accedido desde el mismo objeto (auto referencia
únicamente)

En la próxima unidad ampliaremos este concepto y veremos la forma concreta de


aplicarlo en nuestras clases.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 32

7. Ejemplos y tips sobre POO


 Cuando se declara un atributo, se está creando un objeto a partir de un
constructor usando la nueva palabra reservada "nuevaInstancia" y ese objeto va a
tener un tipo de dato. No hay que confundir el tipo de dato con el constructor,
aunque ambos (de momento) lleven el mismo nombre (pero el constructor usado
va acompañado de "()"). Repasando:

String nombre nuevaInstancia String()


(1) (2) (3) (4)

Tenemos, por orden:


o (1): String: el "tipo de dato", la clase a partir de la cual se crea el objeto: es
la clase instanciada

o (2): nombre: el objeto creado

o (3): nuevaInstancia: palabra reservada

o (4): String(): método constructor utilizado para crear el objeto (por eso tiene
"()") que pertenece a la clase String. En este caso, es el constructor por
defecto, ya que no recibe parámetros

Si en lugar de "String" tuviésemos "Color" o "Marca" o "Modelo" o "Club", sería


exactamente lo mismo.

 ¿Qué podemos tener dentro de los métodos? Vimos unos tipos de métodos
especiales llamados setters y getters, que guardan y devuelven datos. También
vimos los métodos constructores. El resto de los métodos, los que queramos
definir, se van a llamar "métodos de negocio", dado que van realizar diferentes
operaciones y acciones relacionadas al problema que estemos resolviendo. Dichos
métodos pueden contener todas las estructuras vimos:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 33

o condicionales, de todos los tipos (simple, doble, múltiple, etc.)


o repetitivas (ciclos "mientras")
o acumuladores y contadores
o asignaciones y operaciones aritméticas y lógicas
o ingreso de datos en atributos ("ingresar:...")
o salida de datos ("mostrar:...") tanto de valores fijos como de valores de
atributos
o vectores y matrices
o también algoritmos: podríamos implementar una búsqueda binaria o un
método de ordenamiento por burbujeo usando objetos, con clases, métodos
y atributos en lugar de programas, funciones y variables (¡y no cambiaría
mucho!)
o Por ejemplo:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 34

En la clase "Usuario" tenemos un método con una estructura condicional


doble y otra anidada. En
En la clase "CrearUsuario" tenemos un método con un ciclo "mientras.

IMPORTANTE: cuando estamos invocando un método que se


encuentra en la misma clase, no es necesario crear un objeto ni
usar el operador punto ("."). Con colocar el nombre del método y
los "()", es suficiente (no olvidar los parámetros, si es que tiene...)

Un ejemplo de esto lo podemos ver en la instrucción: "cargarDatos()"

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 35

 Tips breves:
o No puede haber clases dentro de clases
o No puede haber métodos dentro de métodos
o Las clases NO van dentro de "programas"
o Un método puede o no devolver valores, pero sólo uno como máximo si lo
hace
o Si un método declara devolver valores, si o si debe tener un "retornar:"
adentro.
o Y la inversa: si un método tiene un "retornar:" adentro si o si debe declarar
en devuelve un valor. Y el tipo de dato será la clase a la que pertenece el
objeto que será devuelto.
o Cuando nos encontramos con un "retornar:" el método interrumpe su
ejecución y vuelve al mismo punto desde el cual fue invocado
o Un método puede o no recibir parámetros, y no hay límite preestablecido
o Para invocar un método o usar un atributo que se encuentra en otra clase, si
o si vamos a tener que crear una instancia de esa clase (o sea, crear un
objeto) y acceder ese método o atributo usando el objeto + el operador
punto (".") + el nombre de atributo o nombre del método (recordar poner los
"()" y los parámetros, si es que lleva).
o Los parámetros de los métodos SIEMPRE llevan el tipo de dato, que está
dado por la clase a la que pertenece (String, Boolean, Auto, Marca, etc)
o La palabra reservada "var" no se usa más
o Otras palabras reservadas que vamos a dejar de usar a partir de esta
unidad: "programa", "inicio", "fin", "const"

 Ejemplo:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 36

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 37

 ¿Qué es una "clase de integración"?

o También conocidas como clase "integradora" o de "test".

o Cada vez que definamos nuestras clases (seguramente necesitemos varias


para modelar una entidad compleja, como cuando vimos el caso de Auto-
Color-Marca), vamos a necesitar una clase de integración (también llamada
clase de "test", porque la idea es probar cómo nuestras clases se relacionan
e interactúan, como vimos en los casos de las clases "CreoAutos",
"EjemploAuto", "UsaClub"). En esta clase vamos a crear atributos que van a
ser las instancias de nuestras clases, también realizaremos invocaciones a
los métodos y usaremos los atributos. De esta forma, podremos comprobar
que las partes forman un todo y que existe coherencia entre ellas.

o También, como vemos a continuación es posible tener una clase integradora


que se ocupe únicamente de ver cómo "funcionaría" una sola clase que
tenga varios atributos y métodos.

o Ejemplo de clase integradora (IMPORTANTE: tómense su tiempo para


analizar el ejemplo, tengan ambas clases "Libro" y "Biblioteca" a mano
para poder seguir las acciones):

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 38

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 39

o Formas de acceder a los datos (atributos):


 En "crearLibroUsandoMetodos()" accedo a los atributos del objeto
utilizando los métodos setter y getter (es la forma recomendada).
 En "crearLibroAccediendoAtributos()" accedo a los atributos del
objeto en forma directa.
 Ambas alternativas son válidas, pero se recomienda la primera por
conceptos que veremos en la unidad 10.

 Ahora un ejemplo un poco más complicado para que analicen...

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 40

 Pregunta frecuente, referida a los ejemplos de las páginas 12 a 15 (Auto, Color y


Marca): "¿Por qué el método definir color/marca se declara tanto en esas clases
Color y Marca como en la clase auto?"
o Primero: es una coincidencia que tengan el mismo nombre ("definirColor" y
"definirMarca"). Y es para demostrar que es perfectamente válido. Cada
objeto es una entidad independiente, que puede tener métodos y atributos.
Por lo tanto, vemos que en la clase Auto tenemos un método "definirColor"
que recibe como parámetro un objeto del tipo Color. Este método lo va a
usar el objeto Auto, ya que "sabe" como cambiarse de color.
o Ahora bien, ya dimos por supuesto que existen ciertas clases que no vamos
a tener que definir, las damos por "dadas" en el pseudocódigo, como sucede
en todos los lenguajes (String, Boolean, Integer, etc).
o Esto no ocurre con las clases "de negocio" que son las clases que define el
programador. Entre esas tenemos la clase Color, que termina encapsulando
el dato del color como un String, pero "envuelto" en una clase propia. Y
como el "color sabe cambiarse de color", también tiene un método
"definirColor" (pero en este caso recibe un String, porque es el dato que
guarda).
o Entonces, la idea, en narrativo, sería:
 creo un objeto color
 guardo el dato del color en ese objeto en forma de objeto tipo string
 creo un objeto auto
 guardo el dato del color del auto en forma de objeto tipo color

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 41

ACTIVIDAD DE ANÁLISIS:
¿Qué otros elementos que tienen cerca en este momento podrían pensar en términos de
clases y objetos? Pensar y modelar algún elemento que elijan, luego definir una clase y,
finalmente, instanciarla.

Para esto, se deberán seguir los siguientes lineamientos:


 Contar con 1 clase que modela el elemento elegido.
 Dicha clase debe tener como mínimo 1 atributo, con su setter y getter.
 Además, deberá tener como mínimo 1 método que haga una o varias operaciones
(un cálculo, una asignación, ingreso de datos, etc.). Este método puede recibir
parámetros y devolver un valor.
 Además, debe haber una clase adicional de integración o test que genere 1 o 2
instancias diferentes de la clase previamente definida
 Todas las clases deberán tener sus respectivos constructores

Podrán comparar sus respuestas con los ejemplos resueltos en el "ANEXO 1 -


Respuesta Actividad de Análisis" al final de esta unidad.
Previamente pueden consultar el "ANEXO 2 - Checklist de código".

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 42

IMPORTANTE:

 ¡Traten de resolverlo cada uno por sus propios medios!


 Las respuestas (el programa) NO debe ser enviado a los foros del Campus,
salvo dudas puntuales de las respuestas.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 43

ANEXO 1 - Respuesta Actividad de Análisis


¿Trataron de resolver los requerimientos?

En caso afirmativo, avancen 3 páginas.

En caso negativo, ¡no avancen y traten de resolverlos antes de ver las respuestas!

Página dejada intencionalmente en blanco

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 44

Página dejada intencionalmente en blanco

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 45

Página dejada intencionalmente en blanco

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 46

1)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 47

2)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 48

3)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 49

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 50

4)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 51

5)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 52

6)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 53

7)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 54

8)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 55

9)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 56

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 57

10)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 58

11)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 59

12)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 60

13)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 61

14)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 62

15)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 63

16)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 64

17)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 65

18)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 66

19)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 67

20)

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 68

ANEXO 2 - Checklist de código


Algunas consideraciones a la hora de revisar su propio código que se suman al checklist
de la unidad anterior:

Cumple
Tema Si No
Ya no se utlizan las palabras reservadas “programa”, “inicio”, “fin”,
“funcion”, “fin funcion”, “var” y “const”
Los métodos cumplen con las mismas reglas que las funciones (en
cuanto a parámetros y valores devueltos)
Se utilizan las palabras reservadas “clase” y “fin clase” y “metodo” “fin
metodo”
Todas las clases tienen un método constructor
Todos los atributos se declaran usando la fórmula: CLASE objeto
PALABRA_RESERVADA_NUEVA_INSTANCIA CONSTRUCTOR()
Una clase que tiene una invocación a un método que se encuentra
declarado en otra clase lo está invocando a través de un objeto y el
operador punto. Ejemplo: otraClase.elMetodo()
Los métodos getter no reciben parámetro, devuelve un objeto y solo
hacen “retonar: obj”
Los métodos setter reciben un parámetro, no devuelve valores y solo
hacen “atributo = parámetro”
Una clase que invoca un método que está declarado en esa misma
clase, hace la invocación en forma directa (sin usar un objeto). Por
ejemplo: “miMetodoInterno()”
Todos los métodos invocados a través de un objeto y el operador punto
se encuentran declarados en la clase a partir de la cual se creó el
objeto. Por ejemplo, en la invocación:
otraClase.elMetodo()
Estamos seguros que el método “elMetodo()” se encuentra en el clase
de la cual es instancia el objeto “otraClase”.
Teniendo:
LaClase otraClase nuevaInstancia LaClase()
El método “elMetodo()” EXISTE en la clase “LaClase”.
Todos los objetos utilizados existen: fueron declarados como atributos o
son parámetros de un método

Si todas las respuestas son afirmativas, hay muy altas chances que el
programa esté libre de errores de código.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 69

ANEXO 3 - Preguntas frecuentes

1) Pregunta: Hay clase que se llama Club con una instrucción, la "instancia de una clase",
donde decimos que el primer "String" que es la clase a partir de la cual se crea el objeto,
pero, ¿cómo se relaciona ese "String" con la clase "Club"?

Respuesta: En el ejemplo de la clase Club tenemos un objeto llamado "nombre",


que es instancia de la clase "String". A su vez, ese objeto es un atributo de la clase
"Club".

Cuando sea necesario crear un club nuevo, se va a poder usar ese atributo para
darle un nombre. Por ejemplo:

Club ponechispas nuevaInstancia Club()

ponechispas.nombre = "Club Social y Deportivo Ponechispas"

2) P: No queda en claro para qué sirven los objetos auxiliares en el ejemplo del Auto,
Color y Marca: "auxColor", "auxMarca", etc.

R: Esos objetos no tienen utilidad práctica, más allá de demostrar cómo se hacen
asignaciones usando objetos (que, de hecho, sería de la misma manera que se hace
usando variables).

3) P: A partir de la frase "en objetos, todo es objetos", la pregunta es ¿un método también
es un objeto?, porque un atributo también se lo puede que ver como objeto...

R: No, un método es un método. La frase "en objetos, todo es objetos" se refiere a


los atributos (antes "variables").

Un objeto, ¿qué es? Es una instancia de una clase. ¿Qué tiene una clase? Métodos
y atributos. ¿Qué es un método? El mecanismo que nos permite darle
comportamiento al objeto. ¿Qué es un atributo? El mecanismo que no permite crear
un objeto. Un objeto, ¿qué es? Una instancia de una... (loop infinito).

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 70

4) P: Con respecto a la invocación del método "definirColor" en la clase "EjemploAuto":


cuando se crea el objeto "primerAuto", se declara además un atributo "primerAutoColor" al
que luego se le asigna el color "gris plata". ¿Por qué ese atributo "primerAutoColor" se
usa para invocar al método "difinirColor", cuando este método se encuentra en la clase
"Auto"? ¿No se tendría que invocar de la siguiente manera?:

primerAuto.definirColor("gris plata")

R: No. Hay que prestar atención a las clases Auto y Color: ambas tienen un método
llamado "definirColor" (un setter en ambos casos) y son métodos independientes
en clases independientes. El detalle es que el método "definirColor" de la clase
"Auto" recibe como parámetro un objeto del tipo "Color". Por otro lado, el método
"definirColor" de la clase "Color" recibe como parámetro un objeto de tipo "String".

Dicho esto:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 71

primerAuto.definirColor(ACA VA UN OBJETO COLOR)

primerAutoColor.definirColor(ACA VA UN OBJETO STRING)

Por esto es que se hace:

primerAuto.definirColor(auxColor)

Porque "auxColor" es un objeto del tipo Color, que se le asignó el objeto


"primerAutoColor".

La narrativa sería: "primero se crea un objeto tipo Color, al cual se le asigna un


String para darle valor. Luego se usa ese objeto tipo Color para asignárselo al
objeto tipo Auto".

Es importante, en las invocaciones de los métodos, ver qué objeto se está


utilizando, porque ese método deberá estar declarado en la clase que se instancia
para crear dicho objeto. Dicho de otra manera, hay una clara trazabilidad que se
mantiene con respecto a:

método invocado

(ver)

objeto que se usa en la invocación

(ver)

clase que se para crear el objeto

(debe tener)

el método invocado

5) P: ¿Cómo podría usar el tipo Boolean en un ejemplo con clases, atributos y métodos?

R: Un ejemplo del uso de objeto tipo Boolean en una clase podría ser:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 72

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 73

6) P: Sobre la frase "Los constructores se ejecutan siempre que se crea un objeto y se


utiliza cuando se instancia una clase": ¿Esto significa que, si se crea más de un objeto a
partir de una clase y, por ejemplo, dentro del constructor hay un ciclo "mientras", este se
va a ejecutar cada vez que cree un objeto de esa clase?

R: Si, exactamente eso. Hay que tener en cuenta que el ciclo se va a ejecutar para
los diferentes objetos que vayan creando, por lo tanto, son "diferentes instancias
("ejecuciones") del mismo ciclo"

7) P: En el momento de declarar los atributos ¿por qué en algunos de los ejemplos se los
declara siguiendo la fórmula:

String nombre nuevaInstancia String()

Y en otros, por ejemplo:

Auto nombre nueva instancia Auto()

¿Es porque en el segundo ya fue creada una clase anteriormente denominada "Auto"?

R: Así como en Estructurado se dio por hecho que el pseudocódigo (como los
lenguajes) provee de los tipos de datos, lo mismo ocurre en Objetos: asumimos que
ya tenemos ciertos tipos de datos, pero que son clases al mismo tiempo.

De hecho, cualquier clase que se instancia es un "tipo de dato", en el sentido en


que se están creando objetos a partir de esa clase. Por lo que si tenemos:

A x nuevaInstancia A()

Decimos: "el objeto "x" es del tipo de la clase A".

8) P: ¿Los objetos están dentro de una clase?

R: Los objetos se declaran en las clases (en los atributos), en tiempo de


programación. A su vez, son instancias de las clases, en tiempo de ejecución.

9) P: ¿Es válida la analogía “los objetos son lo que eran (en estructurado) las variables?

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 74

R: Si, pero además de poder guardar varios datos y no uno solo (que son los
atributos), como si fuera poco, tienen comportamiento (que son los métodos).

10) P: ¿Los atributos son lo que eran las variables (en estructurado)?

R: Ídem respuesta anterior

11) P: ¿Los objetos tienen atributos?

R: Las clases tienen atributos, los cuales se pueden usar una vez que se crear una
instancia de esa clase.

12) P: ¿Se puede hacer una clase a partir de un objeto creado en la clase que antes lo
contenía?

R: No, no se puede ir de clase a objeto. Pero sí al revés: a partir de una clase se


crea (instancia) un objeto.

13) P: Dentro de un método se le asigna el valor del parámetro "marcaNueva" al atributo


de la clase "Marca". ¿Qué es "marca" (con minúscula)? ¿Un objeto? ¿Una clase? ¿O
puede ser las ambas cosas al mismo tiempo?

R: El objeto "marca" está declarado donde dice "String marca nuevaInstancia


String()".

"marca" ES un objeto y ES un atributo del tipo "String" que está en la clase


"Marca". Pertenece o "es del tipo" String, como se indica en la declaración.

Es importante, en los ejemplos, diferencias las mayúsculas de las minúsculas: las


clases normalmente comienzan con mayúscula y los atributos declaran objetos que
empiezan con minúscula, por lo que podría tener, por ejemplo:

String string nuevaInstancia String()

Donde:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 75

String: es la clase

string: es el objeto

14) P: ¿"Color colorDelAuto nuevinstancia Color()" es un objeto por estar dentro de la


clase "Auto"?

R: Es un atributo, donde "colorDelAuto" es el objeto. Ese atributo está declarado en


la clase "Auto".

15) P: ¿Pueden existir clases dentro de una clase que a su vez son objetos de esa clase
en donde se declaran?

R: Si bien algunos lenguajes permiten anidar clases (declarar clases dentro de


clases), no se considera una técnica de programación recomendada. A fines de los
ejemplos de este curso, vamos a omitir esa práctica.

16) P: ¿Esto sería un getter?

metodo Float ingresarTemperatura()

mostrar: "Ingrese la temperatura en grados Kelvin"

ingresar: gradosKelvin

retornar: gradosKelvin

fin metodo

R: No, sería una mezcla de getter (porque devuelve el valor de un atributo) y de


setter (porque permite ingresar un valor a un atributo).

¿Está mal? No. ¿Es un problema hacer algo así? No, en lo absoluto, simplemente
que no es un getter, es un método cualquiera ("método de negocio"). ¿Conviene
tener esta clase de método? Se recomienda que un método haga la menor cantidad
de acciones posible, por lo que la alternativa sugerida sería tener:

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 76

metodo ingresarTemperatura()

mostrar: "Ingrese la temperatura en grados Kelvin"

ingresar: gradosKelvin

fin metodo

metodo Float devolverTemperatura()

retornar: gradosKelvin

fin metodo

De esta forma, habría dos invocaciones en lugar de una, pero los métodos serían
más "atómicos" y más reutilizables.

17) P: ¿Qué relación hay entre "Color", "colorDelAuto", "primerAutoColor"? ¿Son distintos
objetos de una misma clase y no tienen nada que ver uno con otro?

R: En la clase "EjemploAuto", los objetos "colorDelAuto" y "primerAutoColor" son


instancias de la clase "Color".

18) P: ¿Qué son los métodos de negocio?

R: Un método de negocio es cualquier método que no sea el constructor. Un getter,


un setter, un método para hacer un cálculo, un ordenamiento, una búsqueda, una
validación, etc. Todo eso son métodos de negocio, para diferenciarlos de los
constructores.

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning
p. 77

Lo que vimos
 Los primeros conceptos del paradigma de Programación Orientada a Objetos
(POO)
 Los conceptos de clase, objeto, métodos y atributos
 Los conceptos de los dos primeros principios que hacen a la Orientación a Objetos
(OO): abstracción y encapsulamiento

Lo que viene:
 Concepto de modificadores de acceso para clases, métodos y atributos
 Concepto de Herencia, uno los pilares de la POO
 Concepto de sobrecarga, tanto de operadores como de métodos

Centro de e-Learning SCEU UTN - BA.


Medrano 951 2do piso (1179) // Tel. +54 11 4867 7589 / Fax +54 11 4032 0148
www.sceu.frba.utn.edu.ar/e-learning

También podría gustarte