Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 57

Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

FICHA DE IDENTIFICACIÓN

Programa al que pertenece Especialización en Inteligencia Artificial

Nombre de la asignatura Fundamentos de Programación para Inteligencia Artificial

Nombre de la unidad temática Módulo 3: Fundamentos Paradigma Orientado a Objetos

Nombre del (los) autor(es) Luis Carlos Díaz – Andrés Felipe Rodríguez

Fecha 14 de mayo del 2021

Idioma Español

Palabras clave Programación, Inteligencia Artificial, Python, Paradigma Orientado a Objetos

Resumen (150 max.)

Contexto sociocultural del OA

Versión 0.1

Tiempo de estudio
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

# COMPONENTE DESARROLLO DEL CONTENIDO DESCRIPCIÓN / REFERENCIA RECURSO

Contextualización (LMS)

1 Presentación Presentación: Sistema de pestañas en HTML en el que a cada Recurso


componente le corresponde una pestaña, parecido HTML
En este módulo se abordará una introducción al a la referencia utilizada en las distintas unidades:
paradigma orientado a objetos. Un sistema de
software, como cualquier sistema es un conjunto de
elementos que se interrelacionan entre sí para lograr
un objetivo. En este sentido, a la hora de desarrollar
un programa y sus elementos constitutivos existen
diversas formas o paradigmas para hacerlo.

Una de esas formas es a través de la definición y


organización de clases que representan objetos de
software que interactuarán entre sí, en tiempo de
ejecución del programa para lograr los resultados
esperados del sistema o la solución a un problema.

A lo largo de la unidad se mostrarán los conceptos


fundamentales de la programación orientada a En el botón ‘presentación’ se debe poner la
objetos a través de actividades de aprendizaje
información que está en el título “Presentación”
interactivo. Esta fundamentación contempla los
conceptos de clase, objeto, atributos, métodos,
estado y comportamiento de una clase u objeto,
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

principio de encapsulamiento, paso de mensajes y En el botón ‘RAE’ se debe poner la información que
herencia simple. está en el título “RAE”

RAE: En el botón ‘Estrategias’ se debe poner la


Los resultados de aprendizaje esperados específicos información que está en el título “Estrategias
pedagógicas”
para este módulo son:
1. SubRAE-FPIA-2.1: Aplicar la técnica de divide En el botón “Evaluación” se debe poner la
y vencerás para solución de problema. información que está en el título “Evaluación”

2. SubRAE-FPIA-3.3: Conocer los conceptos En el botón “Actividades” se debe poner la


fundamentales del paradigma orientado a información que está en el título “Actividades”
objetos.
Nota: La última pestaña (Actividades) aún no tiene
3. SubRAE-FPIA-3.4: Construir funciones y
contenido, por lo pronto se puede dejar vacío.
clases.
4. SubRAE-FPIA-3.5: Usar módulos para
organizar sus programas.
Relación entre los SubRAE del módulo y los RAE-FPIA
del curso:

RAE- RAE-FPIA- RAE-FPIA- RAE-FPIA-


FPIA-1 2 3 4
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

SubRAE- X
FPIA-2.1

SubRAE- X
FPIA-3.3

SubRAE- X
FPIA-3.4

SubRAE- X
FPIA-
3.5

Estrategias pedagógicas
En este módulo se tendrán tres actividades centrales
de aprendizaje, diseñadas para fortalecer y aplicar los
conceptos aprendidos durante el desarrollo de las
temáticas que tiene en cuenta dos estrategias
pedagógicas propias del curso:
• Aprendizaje basado en problemas mediante
ejercicios individuales o grupales
correspondientes al avance temático del curso
• Aprendizaje colaborativo, en el cual, a través
de equipos de trabajo, se busca un intercambio
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

de conocimientos por pares para reforzar el


aprendizaje significativo.
Evaluación
Para este módulo se realizarán actividades de
evaluación sumativa durante la semana que compone
el módulo.

Evaluación sumativa:
• Durante esta semana se otorgará 50 puntos del
trabajo de clase. Se evalúa el uso de
precondiciones y poscondiciones, el uso de la
plantilla de programas y finalmente el correcto
funcionamiento de los programas.
Los estudiantes deberán entregar como equipo el
ejercicio propuesto en la actividad sobre el uso de la
programación orientada a objetos para resolver un
problema de complejidad baja sobre el cálculo del
área de algunas figuras geométricas básicas.
Actividades

En este espacio se presenta el cronograma general


semana a semana de las actividades que debe desarrollar
el estudiante. Aquí podrá consultar el cronograma
detallado.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Fundamentación conceptual (OA)

1 Introducción Bienvenidos a este módulo, en el que vamos a Video de sala ágil en el que se explican los
(video) presentar los conceptos fundamentales del conceptos generales del paradigma orientado a
paradigma de programación orientado a objetos. objetos.

Es importante tener presente que en la construcción


de software existen diversos métodos, técnicas y lo
que aquí llamaremos paradigmas de programación.

Tal vez dos de los más representativos paradigmas de


programación tienen que ver con la programación
estructura e imperativa y la programación orientada a
objetos. No obstante, existen otros. La programación
lógica, por ejemplo, que se basa en la construcción de
axiomas a partir de los cuales se hacen inferencias
para resolver un problema. Algunos lenguajes
conocidos de este paradigma son Prolog, Lisp, Erlang,
entre otros.

La programación imperativa se centra en la


construcción de órdenes o instrucciones para resolver
un problema. En este paradigma, asociado con los
conceptos de resto del presente curso, se centra en la
definición de estructuras de datos y procedimientos
(rutinas o funciones) a partir del uso de estructura de
programación como asignaciones, condicionales y
ciclos. En este paradigma, los datos y los
procedimientos son independientes.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Esta forma de programación es de las más clásicas y


tiene muchas ventajas en el desarrollo de software
debido a la facilidad de compresión de sus estructuras
básicas, legible, el rendimiento o eficiencia del código
generado, especial para casos específicos, entre
otros. Sin embargo, tiene desventajas en cuanto a su
mantenimiento, reutilización y su uso en sistemas de
gran tamaño.

Algunos lenguajes conocidos de este paradigma son C,


C++, Fortran, Basic, Python, entre muchos otros.

El paradigma de la programación orientada a objetos


busca dar solución a dichas desventajas y a
proporcionar una abstracción diferente a la hora de
abordar la solución a un problema. En este paradigma
la abstracción que usamos del mundo real es a través
de la identificación de objetos, sus características y
comportamiento.

Esto hace que la relación entre los artefactos del


mundo real esté más asociada con su contraparte en
el mundo computacional. En este sentido, la
funcionalidad de un sistema está dado en términos de
los servicios prestados por los objetos y la relación
entre los mismos. En este paradigma, a diferencia del
paradigma imperativo, los datos y sus procedimientos
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

asociados están organizados bajo un mismo tipo de


entidades, las clases.

En esta unidad no se pretende hacer un estudio en


profundidad de todos los conceptos y técnicas del
paradigma orientado a objetos, que podría dar lugar a
todo un curso completo, sino a mostrar sus
fundamentos para entender muchas de las
funcionalidades que ofrece un lenguaje como Python.

Python ofrece la oportunidad de programar de una


manera, digamos, híbrida al combinar aspectos de la
programación imperativa y aspectos de la
programación orientada a objetos. De hecho, todos los
elementos que se manejan en Python son objetos.

Como ejemplo, las listas, los diccionarios, las tuplas,


los sets, los strings y varias de las facilidades que han
usado hasta ahora son objetos.

Los invitamos entonces a conocer y a aprender varios


de los conceptos fundamentales del paradigma
orientado a objetos con el fin de aplicar
adecuadamente sus beneficios a la hora de desarrollar
programas usando clases propias o de utilizar de mejor
manera muchas de las clases y objetos que son
provistas por el lenguaje, particularmente en el
contexto de aplicaciones asociadas al área de la
inteligencia artificial.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

2 Paradigma Lección 1: Contexto


Lección 1: Contexto
orientado a
Tema 1: Programación orientada a objetos
objetos Tema 1: Programación orientada a objetos
Texto 1: Un sistema de software en general, o un
programa en particular, se puede implementar usando Parametrizar con bloque de texto el texto 1.
diferentes paradigmas de programación. Entre estos
paradigmas podemos encontrar la programación Parametrizar el texto 1 por medio de bloque
estructura e imperativa (como la que se ha visto a gráfico estático en la que la imagen base sea:
través de este curso) en la cual los principales
elementos constitutivos del sistema (programa) son las
estructuras de datos (variables, vectores, matrices) y
los procedimientos (funciones). Estos elementos
pueden organizarse finalmente en módulos.

Texto 2: Cuando se implementa un sistema de


software usando el paradigma orientado a objetos, el Parametrizar con bloque de texto el texto 2.
o los programas del sistema están diseñados a través
de la definición e implementación de clases a partir Parametrizar el texto 2 por medio de bloque
de las cuales se crean objetos de software. Estos gráfico estático en la que la imagen base sea:
objetos interactúan unos con otros para resolver un
problema y alcanzar un objetivo o situación esperada
a través de la ejecución del programa.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Texto 3: Una vez se establezca que la estrategia a


seguir para desarrollar nuestro sistema de software es
la programación orientada a objetos, nuestra
abstracción del mundo real y la tarea para desarrollar
nuestros programas se centran en tres pasos generales
descritos a continuación:
Pestaña 1. Primer paso: Identificar objetos del
Parametrizar con bloque de texto el texto 3.
mundo real en el contexto del problema sobre el cual
vamos a hacer nuestros programas con el fin de
establecer una solución o un resultado esperado. Parametrizar por medio de bloque de acordeón las
pestañas 1, 2 y 3 del texto 3.
Pestaña 2. Segundo paso: Modelar o diseñar clases de
software que representen esos objetos clave del
mundo real que nos ayudaran a solucionar el problema
o alcanzar el resultado esperado.
Pestaña 3. Tercer paso: Implementar las clases en un
lenguaje de programación como Python para crear
objetos de software en el mundo computacional que
son, en últimas, las instancias que permitirán ejecutar
el programa para lograr el fin establecido.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Tema 2: Proceso general: Identificar objetos del


mundo real
Texto 1: En nuestras explicaciones vamos a
diferenciar el mundo real, digamos las cosas que están
a nuestro alrededor o sobre las que de una u otra
manera nos relacionamos o hablamos, del mundo
computacional, digamos los elementos constitutivos
de nuestro programa asociados con su diseño y con su
ejecución. Por completitud podemos hablar también
del mundo mental, pero no será tratado de manera
distintiva en este contexto.

Tema 2: Proceso General: Identificar objetos del


Mundo Real

Parametrizar con bloque de texto el texto 1.

Etiqueta 1: Mundo mental: Solamente por motivos de Parametrizar el texto 1 por medio de bloque de
nuestras explicaciones llamaremos mundo mental gráfico con etiquetas en la que la imagen base sea:
aquellos aspectos asociados con nuestra mente, las
ideas y abstracciones.
Etiqueta 2: Mundo real: Solamente por motivos de
nuestras explicaciones llamaremos mundo real a la
realidad que percibimos cotidianamente en nuestro
alrededor ya sean entidades físicas o conceptuales
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Etiqueta 3: Mundo computacional: Solamente por


motivos de nuestras explicaciones llamaremos mundo
computacional a los elementos de diseño y ejecución
que conforman el software de nuestros programas.
Texto 2: Los objetos del mundo real que podemos
referenciar pueden ser entidades físicas como un
carro, un reloj, una persona, un libro, un dibujo, etc.,
o pueden ser entidades conceptuales o abstracciones
de algún fenómeno como el clima, un trueque, una
transacción, la noción de estudiante, trabajador,
empleado, salario, etc.

Texto 3: Los objetos que se deben identificar están Y en la que a cada etiqueta le corresponda las
limitados por el contexto sobre el cual queremos etiquetas enunciadas en el texto 1.
construir la solución a un problema. El contexto y la
identificación del problema concreto que queremos
resolver juegan un papel primordial en esta tarea de
identificación de los objetos que necesitamos para
diseñar e implementar nuestros programas.
Por ejemplo, si queremos organizar los datos de una
persona para mantenerla en un pequeño sistema de
información, debemos entonces estar seguros de cuál Parametrizar con bloque de texto el texto 2.
es el contexto y que queremos solucionar o lograr,
antes de empezar a identificar objetos para iniciar
nuestra labor.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Parametrizar por medio de bloque de gráfico


estático que contenga un collage de imágenes de
objetos físicos como los listados en el texto 2.
(¡imágenes propias que nos puedan proveer!).
Si el contexto está asociado con la Registraduría
Nacional y la elaboración de cédulas de ciudadanía,
entonces lo que quisiéramos diseñar será
completamente diferente a si el contexto está
Parametrizar con bloque de texto el texto 3.
asociado con las historias clínicas de una persona para
un hospital.
Parametrizar por medio de bloque de gráfico
En cuanto a la definición concreta del problema, la
estático en el que la imagen base sea:
recomendación es escribir un texto haciendo la
descripción de lo que se quiere hacer y delimitando el
contexto que sea del caso. Este texto se convierte en
la fuente primaria para identificar los objetos del
caso. Un método de ayuda inicial para este ejercicio
es seleccionar los sustantivos del texto. Estos
constituyen la lista inicial de potenciales objetos.
Texto 4: Por ejemplo, si se requiere hacer un
programa para controlar un ascensor o elevador, ya
estamos diciendo cuál es el contexto. Aunque nos
podemos imaginar los procesos y en principio todos
conocemos el funcionamiento, el paso indicado es
escribir los detalles. El siguiente texto muestra un
fragmento de una descripción sobre el caso:
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Si tomamos los sustantivos, la lista de posibles objetos


que podemos identificar son: elevador, puerta, botón,
piso, control central. Más adelante miraremos que
algunos potenciales sustantivos son datos
complementarios o características de objetos más <a href='https://www.freepik.es/fotos-vectores-
complejos. Por ejemplo, número de piso es un dato gratis/negocios'>Vector de Negocios creado por
asociado con un piso; la luz (apagada/encendida) es freepik - www.freepik.es</a>
una característica de un botón.
Tema 3: Proceso general: Diseño clases Parametrizar con bloque de texto el texto 4.
Texto 1: Una vez identificados los objetos clave del
mundo real que tienen que ver con el problema a Parametrizar el texto 4 por medio de bloque de
solucionar se inicia el diseño de clases. La idea es gráfico estático en el que la imagen base sea:
establecer clases de objetos, es decir, encontrar
objetos que comparten las mismas características o
comportamientos. Por ejemplo, en el caso del
ascensor o elevador los botones internos y externos
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

pueden establecerse que son de la misma clase, pues


comparten los mismos atributos o propiedades, así
como su funcionamiento.
Texto 2: Tomemos como caso de ejemplo de este
apartado que queremos administrar la información de
algunos caninos que llegan a un centro de cuidado.
Parte del texto que podríamos describir de la situación
son las características de los diferentes ejemplares de
los que queremos organizar cierta información.

Tema 3: Proceso General: Diseño de Clases


De la parte izquierda de la imagen podemos tomar de
referencia cuatro ejemplares y con cada uno hacer
una descripción. Por ejemplo, podemos mirar a Perry. Parametrizar con bloque de texto el texto 1.
Perry es un perro de raza doberman, de pelo negro y
liso, que no tiene cola y que tiene las orejas
levantadas, entre otras características.
Si hacemos lo mismo con los otros ejemplares (no es
necesario hacerlo con todos), podemos darnos cuenta
de que comparten las mismas características: todos
tienen un nombre, una raza, un color de pelo, si tienen
o no cola, etc. Estas características comunes nos
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

permiten decir que todos estos ejemplares


corresponden a una mima clase, la clase perro. Parametrizar con bloque de texto el texto 2.
De la parte derecha de la imagen podemos ver como
se modela la clase perro. Esa caja (rectángulo) de tres
Parametrizar el texto 2 por medio de bloque de
secciones nos permite decir (modelar o representar)
gráfico con etiquetas en la que la imagen base sea:
tres cosas: el nombre de la clase (primera sección), las
características o atributos de la clase (segunda
sección) y el comportamiento o métodos de la clase
(tercera sección). Ese rectángulo de tres secciones
corresponde a un lenguaje de diseño denominado UML
por sus siglas en inglés que significa: Lenguaje de
Modelado Universal.

Etiqueta 1: Perry: Perry es un objeto del mundo real


(en este caso una entidad física: un perro) que ha sido
identificado como parte de la información que se
quiere organizar a través de nuestro programa.
Etiqueta 2: Modelo UML de la clase perro: Este
diagrama rectangular de tres secciones corresponde al
modelo UML del diseño de la clase perro para nuestro
ejemplo. Y en la que a cada etiqueta le corresponda las
etiquetas 1 (parte izquierda de la imagen) y 2 (parte
derecha de la imagen) enunciadas en el texto 2.
Tema 4: Proceso general: Implementar clases
Texto 1: Ahora que tenemos el diseño de clases para
nuestro programa (en este caso de ejemplo, solo una
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

clase: la clase perro), debemos situarnos en el mundo


computacional. A partir del diseño de clases y su
implementación en un lenguaje de programación
como Python podemos crear objetos de software
pensando cómo pueden interactuar estos objetos
durante la ejecución de nuestro programa para
mostrarnos, en este caso, información asociada con
los caninos.
Texto 2: Siguiendo con el caso de ejemplo de los
caninos, se debe implementar (describir en código de
programación la definición de las clases establecidas.
Una vez hecha la definición de una clase en Python
(así como la definición de una función), es posible
crear ninguno, uno, dos, o muchos objetos de software
la clase perro. En la siguiente figura se muestra la
clase perro definida en UML, una metáfora para
representar los objetos que se pueden crear a partir
de la clase Perro y la representación de un objeto en
UML.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Etiqueta 1: Modelo UML de la clase perro: Este Tema 4: Proceso General: Implementar Clases
diagrama rectangular de tres secciones corresponde al
modelo UML del diseño de la clase perro para nuestro
ejemplo. Parametrizar con bloque de texto el texto 1.
Etiqueta 2: Metáfora de representación de objetos:
Cada circunferencia de color rojo, azul y verde,
Parametrizar con bloque de texto el texto 2.
representan simplemente la idea de poder crear uno o
muchos objetos a partir de una misma única clase.
Parametrizar el texto 2 por medio de bloque de
Etiqueta 3: Modelo UML de un objeto: Este diagrama
gráfico con etiquetas en la que la imagen base sea:
rectangular de dos secciones corresponde al modelo
UML de un objeto de la clase. Observe que las
características definidas en la clase, tiene un valor
propio en objeto.

Y en la que a cada etiqueta le corresponda uno de


los textos de las etiquetas 1 (corresponde a la parte
izquierda de la imagen), 2 (corresponde a la parte
central de la imagen) y 3 (corresponde a la parte
derecha de la imagen) en el texto 2.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

3 Clases y
Lección 2: Conceptos y Definiciones Clave Lección 2: Conceptos y Definiciones Clave
Objetos
Tema 1: Clases vs objetos
Texto 1: Una primera visión para entender la relación Tema 1: Clases vs Objetos
(diferencias y semejanzas) entre clase y objeto se Parametrizar con bloque de texto el texto 1.
puede obtener de tres formas diferentes:
Parametrizar el texto 1 por medio de bloque de
gráfico estático en el que la imagen base sea:

Pestaña (tab) 1: Conjunto vs elemento: En esta


perspectiva, un objeto es a una clase, así como un
elemento es a un conjunto, es decir, que un objeto es
un elemento o instancia particular de una clase (el
conjunto).
En términos de conjuntos, podríamos decir que una
clase es la definición por comprensión del conjunto
(Ejemplo: V = {x /x es una vocal}), mientras que un
objeto es cualquiera de los elementos concretos del Parametrizar el resto del Texto 1 por medio de
conjunto (Ejemplo: a,e,i,o,u) bloque de TABS con las pestañas 1, 2 y 3.
Desde este punto de vista las clases y los objetos
tienen las mismas características; sin embargo, el
objeto es un elemento concreto de la clase.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Parametrizar la Pestaña 1 del Texto 1 por medio de


bloque de gráfico estático en el que la imagen base
sea:

Pestaña (tab) 2: Tipo de dato vs variable: En esta


perspectiva, un objeto es a una clase, así como
variable es a un tipo de dato; desde esta visión, una
clase puede verse como una evolución de un tipo de
dato a partir de la cual se puede declarar uno o varios
objetos (las variables) de ese tipo.
Se puede entender desde esta perspectiva que
cualquier variable guarda las mismas características
del tipo de dato específico al que pertenezca. Una
variable de tipo entero se limita a la definición del
entero en que por ejemplo no tiene decimales y al Parametrizar la Pestaña 1 del Texto 1 por medio de
espacio que puede ocupar en memoria (2 o 4 bytes, bloque de gráfico estático en el que la imagen base
por ejemplo). La diferencia aquí es que la variable sea:
tiene o almacena un valor concreto (Ejemplo: x = 5).
Lo mismo pasa entre clases y objetos. La clase define
las características que tendrán los objetos que se
puedan crear a partir de la clase, pero son los objetos
los que tienen o almacenan los valores concretos de
esas características.
Por ejemplo, en la clase perro de la siguiente figura
se puede definir la característica “raza” de tipo
String, pero el valor concreto (por ejemplo,
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

doberman, pastor alemán, etc.) será parte del objeto


concreto que se pueda crear a partir de la clase.

Pestaña (tab) 3: Plantilla vs ejemplar: En esta


Parametrizar la Pestaña 3 del Texto 1 por medio de
perspectiva, un objeto puede verse como un ejemplar
bloque de gráfico estático en el que la imagen base
o muestra de una plantilla o patrón definido con
sea:
anterioridad. Esta es una analogía clásica utilizada
para explicar la diferencia entre clase (el molde o
plantilla) y el o los objetos que puedo crear a partir
de ahí.

(continuación del Texto 1…)


Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Desde cierto punto de vista, y para resumir aquí, de la


manera más sencilla y práctica posible, podemos
hacer las siguientes aseveraciones sobre lo que es una
clase y su relación con los objetos:
• Una clase es una definición abstracta de un
objeto.
• Las clases son nuevos tipos avanzados de datos
agregados por el programador.
• Los objetos son agrupados en clases.
• Una clase es una plantilla para crear objetos.
• Un objeto es una instancia de una clase en la cual Tema 2: Atributos y Métodos
sus características adquieren un valor
determinado. Parametrizar con bloque de texto el texto 1.

Tema 2: Atributos y métodos


Parametrizar el texto 1 por medio de bloque de
Texto 1: Las clases, y lógicamente los objetos o
gráfico estático en el que la imagen base sea:
instancias de la clase, tienen un estado y un
comportamiento. Acorde con la relación entre clase y
objeto que discutimos en el tema anterior (tema 1),
vamos a referirnos a estas definiciones centrados en
el concepto de clase, pero teniendo en cuenta, que lo
que se defina en la clase va a ser parte de las
características de los objetos que pertenezcan a la
clase.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Pestaña (tab) 1: Estado: El estado de una clase se


refiere al conjunto de sus atributos. Un atributo es
simplemente una característica de la clase. Por Parametrizar por medio de bloque de TABS las
ejemplo, en la clase perro los atributos son nombre, pestañas (tabs) 1 y 2 del texto 1.
raza, color de pelo y si tiene o no tiene cola. Puede
haber más, pero en nuestro ejemplo se seleccionaron
estas características o atributos.
En la definición de una clase los atributos son en
últimas variables que pertenecen a algún tipo de dato
básico (entero, flotante, booleano) e incluso a otra
clase (ejemplo: string).
Pestaña (tab) 2: Comportamiento: El
comportamiento de una clase se refiere al conjunto de
sus métodos. Un método es en últimas una función que
le pertenece a la clase. En este sentido, un objeto o
instancia de la clase es capaz de llevar a cabo una
tarea o funcionalidad específica.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

En la definición de una clase, los métodos no son más


que la definición de las funciones que puede realizar
un objeto de la clase. Es importante recordar aquí que
en una función podemos hablar de tres momentos o
aspectos clave: su definición, su implementación y su
uso o invocación.
En el diseño de clases, los métodos de la clase se
definen y se implementan al interior de la clase (lo
veremos más adelante con un ejemplo), pero la
invocación, llamado o uso de los métodos (es decir, su
ejecución) se hace a través de los objetos que
pertenecen a la clase.
Texto 2: Como se mencionó al inicio, el estado y el
comportamiento hace referencia a la clase y a todos
los objetos que se puedan crear a partir de ella. La
siguiente imagen muestra un diagrama UML de la
definición de una clase denominada persona, en la
cual la segunda sección del rectángulo que la define
muestra sus atributos, y la tercera sección, sus
métodos. Parametrizar con bloque de texto el texto 2.

Parametrizar el texto 2 por medio de bloque de


gráfico estático en el que la imagen base sea:
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Entre tanto, la metáfora que representa un objeto de


dicha clase muestra también sus atributos o estado en
el centro de la circunferencia (zona de color rojo), y
sus métodos o comportamiento en la parte exterior de
la circunferencia (zona de color verde).
Observen que tanto la clase en UML como la metáfora
que representa un potencial objeto de la clase tienen
los mismos atributos y métodos. Con la salvedad de
que, en el objeto, sus atributos tienen un valor
concreto. En este sentido, se puede hablar de estado
y comportamiento tanto de clase como de sus objetos
o instancias.
Tema 3: Principio de encapsulamiento
Texto 1: Una propiedad muy importante dentro de los
conceptos fundamentales de la programación
orientada a objetos tiene que ver con el ocultamiento
de la información o principio de encapsulamiento.
El principio de encapsulamiento a nivel de clases y
objetos se refiere a que los atributos, el estado de una
clase, debe estar oculto para otras clases o, más
precisamente, para los objetos de esas otras clases Tema 3: Principio de Encapsulamiento
dentro del sistema de software.
Parametrizar con bloque de texto el texto 1.
En otras palabras, los objetos no deberían conocer
detalles de implementación de otros objetos. En Parametrizar el texto 1 por medio de bloque de
términos prácticos, a la hora de programar, un objeto gráfico estático en el que la imagen base sea:
x no debería poder modificar directamente el atributo
de otro objeto y.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Este principio de encapsulamiento se refiere


específicamente a todos los atributos de una clase, y
es una propiedad que los programadores deben
mantener como una buena práctica. Sin embargo, es
posible que también se puedan ocultar algunos
métodos.
La metáfora que hemos estado usando para
representar un objeto tiene esa zona central de color
rojo precisamente para ubicar allí los atributos y
representar ese ocultamiento de los datos hacia el
exterior. De igual manera, la zona de color azul
permite representar aquellos métodos que también se
requieran ocultar hacia el exterior del objeto.
Finalmente, la zona de color verde permite
representar los métodos que no están ocultos hacia el
exterior del objeto.
Veremos a continuación cómo se logra definir cuáles
métodos se quieren ocultar y cuáles no. Como ya
mencionamos antes, por norma, todos los atributos
deben estar ocultos.
Texto 2: Los lenguajes de programación ofrecen una
característica a la hora de definir los atributos y los
métodos de una clase que permiten usar el principio
de encapsulamiento. Esta característica se denomina
nivel de visibilidad. Por ahora, solo nos interesan los
dos niveles más importantes: el nivel de visibilidad
“privado” y el nivel de privacidad “público”.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

A la hora de diseñar una clase (usando UML), este nivel


de visibilidad se define por el diseñador o programador
a través de los signos + y – antes de escribir el nombre
del atributo o el método correspondiente.
En la siguiente imagen de una clase denominada perro
se puede observar este detalle:

Parametrizar con bloque de texto el texto 2.

Parametrizar el texto 2 por medio de bloque de


gráfico estático en el que la imagen base sea:

Cuando se observa un diagrama de clase como el de la


imagen se puede decir entonces que los atributos
nombre y edad son privados (con lo cual se cumple el
principio de encapsulamiento) y que todos los métodos
de la clase son públicos. Así como se recomienda como
norma, que todos los atributos sean privados o que
estén ocultos, también es muy común que todos los
métodos sean públicos. Esto se debe a que es
precisamente a través de los métodos (su uso) que los
objetos se pueden comunicar.
Aunque en esta clase persona de la figura no se
muestra un método que sea privado, si ocurre que se
necesite hacer métodos ocultos para otras clases. En
este caso, se hace la indicación en el diagrama UML de
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

clase usando el signo – antes del nombre del método


que se quiere definir como privado (oculto).
Tema 4: Paso de mensajes
Texto 1: Como se mencionó en el principio de
encapsulamiento, los objetos no deberían conocer los
atributos de otros objetos. Este principio fundamental
del paradigma orientado a objetos hace que cada clase
sea independiente en el desarrollo de sus
responsabilidades. Esto es clave en la construcción de
software complejo y en la promoción de la
reutilización de clases en otros sistemas de software.
Las preguntas que surgen son:
• Si la idea es que los objetos sean autónomos e
independientes, ¿cómo se comunican entonces
entre ellos para llevar a cabo la tarea general del
programa?
• Si un objeto x no puede modificar directamente el
atributo de otro objeto y, dado el principio de
encapsulamiento, ¿cómo se puede lograr?
Texto 2: La respuesta a estas preguntas es que dado
que los métodos son visibles, es decir, son públicos
para todos los demás objetos, entonces un objeto x le
puede pedir a otro objeto y que ejecute uno de sus
métodos. En la terminología de la programación
orientada a objetos, se dice que el objeto x le envía
un mensaje al objeto y; y el nombre del mensaje
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

corresponde al nombre del método del objeto y que Tema 4: Paso de Mensajes
es invocado.
Ejemplo: en la imagen siguiente tenemos dos objetos:
objUno y objDos. Cuando el objeto objUno quiere
Parametrizar con bloque de texto el texto 1.
comunicarse con el objeto objDos para que el objeto
objDos ejecute el método denominado metodo3() se
dice entonces que:
El objeto objUno le envía el mensaje Metodo3() al
objeto objDos.
En términos prácticos, en la escritura de código, esto
quiere decir que en la implementación de alguno de
los métodos de la clase a la que pertenece objUno, se
debe enviar el mensaje señalado con anterioridad al
otro objeto.
El mensaje se escribe nombrando el objeto al que le
quiero enviar el mensaje, seguido del signo punto (.),
y luego el nombre del método que se quiere invocar
del objeto que recibe el mensaje. Para nuestro
ejemplo, esa línea de código se escribe así:
objDos.Metodo3()
Los mensajes a objetos también pueden ser enviados Parametrizar con bloque de texto el texto 2.
(escritos) en la implementación de una función o en
un programa principal. El único requisito, además de
que el método sea público, es que el objeto al que le
debe enviar el mensaje haya sido creado con
anterioridad (esto lo vemos más adelante).
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Texto 3: El paso de mensajes es un procedimiento


sencillo y rutinario y es la forma de escribir muchas de
las instrucciones de nuestros programas que usan
clases y objetos. En muchos de los programas que se
han hecho hasta ahora, tal vez sin ser conscientes de
Parametrizar el texto 2 (el ejemplo) por medio de
esto, hemos estado enviando mensajes. Por ejemplo,
bloque de gráfico estático en el que la imagen
con base en el siguiente par de instrucciones:
base sea:

miLista = [10,45,18,35,27]
miLista.append(96)

Ahora, podemos explicar que existe en Python una


clase lista (List) de la cual hemos creado objetos con
distintos nombres (como en este caso, “miLista”).
Que le podemos enviar mensajes a nuestro objeto de
la clase list. En este ejemplo le hemos enviado el
mensaje append() para que adicione un nuevo
elemento a la lista.
Si imprimimos la lista “miLista”, el resultado debe
ser:

[10,45,18,35,27,96]
De igual manera, con base en el siguiente par de
instrucciones:

cadena = "Hola”
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

cadena.upper()

Podemos decir que string es una clase, que hemos


creado un objeto denominado cadena que pertenece
a la clase string, y que le podemos enviar un mensaje
como upper() para que cambie los caracteres a
mayúscula.
Si imprimimos esa cadena el resultado debe ser:
HOLA
Practiquemos
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

4 Definición de
Lección 3 Implementación de clases en Python
Clases y Tipos Lección 3 Implementación de Clase en Python
de Métodos Tema 1: Definición de Clases
Texto 1: La definición e implementación de una clase Tema 1: Definición de Clases
en Python se realiza con la palabra reservada class y
la sintaxis es la siguiente: Parametrizar con bloque de texto el texto 1.

Parametrizar el texto 1 por medio de bloque de


gráfico con etiquetas en la que la imagen base sea:

Etiqueta 1 – class: La palabra reservada class


permite definir una clase. La definición e
implementación de la clase debe estar antes de
poder crear objetos o instancias de la clase en
cuestión.
Etiqueta 2 – def: La palabra reservada def al interior
de una clase, indica al intérprete que se va a
implementar un método. Observe que el método se
define exactamente igual que una función normal,
solo que esta vez esta definición está dentro del
bloque de definición de la clase. Dentro de una clase
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

se pueden definir varios métodos con esta misma


estructura.
Etiqueta 3 – set_nombre: Luego de la palabra
reservada def se define el nombre que llevará el
método en la clase. En este ejemplo, el nombre de
este método es set_nombre. De la misma manera que
vimos en la unidad sobre el tema de funciones, un
método tiene parámetros, los cuales van entre
paréntesis. En este ejemplo, Self y nombre son los
parámetros del método. Los métodos, de igual
manera que las funciones, pueden tener valores de
retorno. Para ello se usa también la palabra
reservada return.
Revisemos
Ingrese a la unidad anterior para revisar el tema de
funciones, ya que en todos los aspectos asociados con
la definición e implementación de métodos es
exactamente igual.
Tema 2 Tipos de métodos
Texto 1: Como se mencionó en el tema anterior,
dentro de la definición de una clase se define también
todos sus métodos usando la palabra clave def para
cada uno de estos.
El punto ahora es que debemos conocer que existen
varios tipos de métodos que requiere un
entendimiento previo para saber que métodos se
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

deben definir e implementar dentro de la definición


de una clase.
El siguiente ejemplo de la definición completa de la
clase Perro nos permitirá discutir los detalles de estos
Tema 2 Tipos de Métodos
tipos de métodos.

Parametrizar con bloque de texto el texto 1.

Parametrizar el texto 1 por medio de bloque de


gráfico con etiquetas en la que la imagen base sea:

Etiqueta 1: Método constructor: Método para la


creación de objetos de la clase.
Etiqueta 2: Método analizador: Método para brindar
información sobre el valor de un atributo de la clase
(más específicamente, de un objeto de clase).
Etiqueta 3: Método modificador: Método para la
modificar o actualizar el valor de un atributo de la
clase (más específicamente, de un objeto de la
clase).
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Etiqueta 4: Método de negocio: Método propio de la


lógica de la clase y de la lógica del sistema de
software.
Texto 2: A continuación, encontrará una breve
descripción de los tipos de métodos que se pueden o
deben definir dentro de una clase.
En cada tipo de método, existe un parámetro
especial o pseudo-parámetro denominado self (ver
imagen). Este parámetro “escondido” es usado por el
Intérprete de Python para saber a cuál objeto debe
referirse (porque recordemos que se pueden crear
muchos objetos de una misma clase) para enviar los
mensajes que le soliciten otros objetos (revisar el
tema de paso de mensajes).
Decimos que es “escondido” porque cuando se habla
del número de parámetros de un método, este Parametrizar Texto 2 por medio de bloque de TAPs
pseudo-parámetro no se cuenta. De hecho, cuando se las pestañas 1, 2, 3 y 4
invoca el método, no se debe pasar explícitamente
ningún valor para él.
Pestaña 1: Métodos constructores: Este tipo de
método se usa para la creación de objetos de la
clase. En Python, estos métodos (porque se puede
crear más de uno), se deben denominar __init__ de
la siguiente manera:
def __init__ (self, …):
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

El primer parámetro de este método siempre debe


ser self. Se trata de un parámetro especial usando en
Python para referirse en el caso de los métodos
constructores a la dirección de memoria en la cual
residirá el objeto de la clase que se va a crear.
Los demás parámetros son usados para ponerle valor
a los atributos de la clase. Dichos parámetros pueden
o no ser obligatorios al crear el objeto. Lo
importante es que en la implementación del método
creador se les dé un valor a todos los atributos de la
clase. Pueden ser entonces valores por omisión o
tomados de aquellos que ingresen como parámetros.
En el ejemplo de la clase perro no se usan
parámetros diferentes a self, pero observe que le
damos valor por omisión a los valores de los atributos
nombre y edad (acorde con el diagrama UML de la
clase) a la hora de crear el objeto, de la siguiente
forma:

def __init__(self):
self.nombre = "NN”
self.edad = 0
De manera alternativa, en este ejemplo de la clase
Perro, podríamos haber escrito el método usando
más parámetros, de la siguiente manera:

def __init__(self, nom, n):


Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

self.nombre = nom
self.edad = n
En muchos lenguajes de programación orientados a
objetos, como en Python, se acostumbra a utilizar el
mismo nombre de los atributos para los parámetros,
de la siguiente manera:

def __init__(self, nombre, edad):


self.nombre = nombre
self.edad = edad

Esto se hace aprovechando que dentro de la clase se


usa la palabra reservada self seguido de un punto (.)
antes del nombre del atributo para diferenciar ese
nombre de otras posibles variables o parámetros
dentro del código de la implementación del método.
Así, dentro de las instrucciones del método es
diferente edad de self.edad
Para crear un objeto de la clase Perro con el primer
método creador definido en el ejemplo, se debe
escribir una instrucción como la siguiente (en el sitio
de nuestro programa en el cual se requiera crear un
objeto de este tipo):

p = Perro()
Para crear un objeto de la clase Perro con el método
alternativo creador usando los parámetros de nombre
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

y edad, se debería escribir una instrucción como la


siguiente:

p = Perro(“Pluto”, 5)

Lo bueno ahora, es que puedo crear muchos objetos


de la clase perro, usando nombres de instancia
diferentes (es decir, nombres de variables como p, q,
r, x, miPerro, Bobby, etc.). Por ejemplo:

p = Perro(“Pluto”, 5)
q = Perro(“Sanson”, 3)
r = Perro(“Peluca”, 10)
x = Perro(“Max”, 5)

Note que este método es muy particular porque se


define y se implementa usando el nombre __init__,
pero para invocarlo se usa el nombre de la clase en
dónde se definió tal método constructor.
Pestaña 2: Métodos analizadores: Este tipo de
método se usa para brindar información sobre el
valor de un atributo de un objeto. Es importante
recalcar aquí (y para cualquier tipo de método) que
la implementación de los métodos se hace a nivel de
la clase, pero la ejecución de estos, lo hace el objeto
particular al cual se le envía el mensaje del caso. Por
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

convención, estos métodos siempre empiezan con el


prefijo get_ seguido del nombre del atributo
respectivo del que se desea dar información.
En el ejemplo de la clase perro se define e
implementa el método analizador get_nombre de la
siguiente manera:
def get_nombre (self):
Se puede observar que este método no tiene ningún
parámetro, teniendo en cuenta que el parámetro self
no cuenta. La definición e implementación completa
del método es la siguiente:

def get_nombre(self):
return self.nombre

El uso de la palabra reservada return se usa al igual


que en las funciones.
Para usar este método o para ser más formales, para
enviarle el mensaje get_nombre a un objeto de la
clase perro se debe escribir una instrucción como la
siguiente (en el sitio de nuestro programa en el cual
se requiera enviar el mensaje respectivo al objeto
indicado –que lógicamente, ya debe estar creado):

temp = p.get_nombre()
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

En este caso p es el nombre de un objeto de la clase


Perro, al cual se le está enviando el mensaje
get_nombre.
Si el objeto fue creado antes con la instrucción:

p = Perro(“Pluto” 5)

Entonces, con la instrucción:

temp = p.get_nombre()

Le estamos asignando a la variable temp el valor


(string) “Pluto”.

Pestaña 3: Métodos modificadores: Este tipo de


método se usa para modificar información sobre el
valor de un atributo de un objeto. Es importante
recalcar aquí (y para cualquier tipo de método) que
la implementación de los métodos se hace a nivel de
la clase, pero la ejecución de estos la hace el objeto
particular al cual se le envía el mensaje del caso. Por
convención, estos métodos siempre empiezan con el
prefijo set_ seguido del nombre del atributo
respectivo que se desea modificar.
En el ejemplo de la clase Perro, se define e
implementa el método modificador set_nombre, de
la siguiente manera:
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

def set_nombre (self, nombre):

Se puede observar que este método tiene un


parámetro, teniendo en cuenta que el parámetro self
no se cuenta. La definición e implementación
completa del método es la siguiente:

def set_nombre(self, nombre):


self.nombre = nombre

Para usar este método o para ser más formales para


enviarle el mensaje set_nombre a un objeto de la
clase perro, se debe escribir una instrucción como la
siguiente (en el sitio de nuestro programa en el cual
se requiera enviar el mensaje respectivo al objeto
indicado que lógicamente, ya debe estar creado):

p.set_nombre(“Lassie”)

En este caso p es el nombre de un objeto de la clase


Perro, al cual se le está enviando el mensaje
set_nombre.

Si el objeto fue creado antes con la instrucción:

p = Perro(“Pluto” 5)
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Entonces, con la instrucción:

p.set_nombre(“Lassie”)

Le estamos modificando el valor del atributo nombre


al objeto p. Es decir, que el nombre de este objeto
de la clase Perro ya no será “Pluto” sino “Lassie”.

Pestaña 4: Métodos de Negocio: Este tipo de


método se usa para definir e implementar
responsabilidades propias de la lógica de la clase y
de la lógica del sistema de software.
En este caso, no existe una convención propia para
nombrarlos, simplemente se sigue la regla de nombre
como el de las funciones. A través de este tipo de
métodos se hacen cálculos, búsquedas de datos,
comparaciones o cualquier otra tarea propia de las
responsabilidades de la clase en cuestión.
Por ejemplo, en nuestro caso de la clase perro, un
método clave es que el perro puede “ladrar”.
Lógicamente, a este nivel solamente a nivel
ilustrativo, vamos a deletrear a través de un string el
sonido emitido por un perro al ladrar. A
continuación, se encuentra la definición de este
método:
def ladrar(self):
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Se puede observar que este método no tiene


parámetros, teniendo en cuenta que el parámetro
self no se cuenta. La definición e implementación
completa del método es la siguiente:

def ladrar(self):
return “guau-guau!”
Para usar este método o para ser más formales para
enviarle el mensaje ladrar a un objeto de la clase
perro, se debe escribir una instrucción como la
siguiente (en el sitio de nuestro programa en el cual
se requiera enviar el mensaje respectivo al objeto
indicado que lógicamente, ya debe estar creado):

p.ladrar()
En este caso p es el nombre de un objeto de la clase
perro, al cual se le está enviando el mensaje ladrar.
Dado que este método retorna un string, podríamos
usar el resultado para imprimir tal string de la
siguiente manera:
print(p.ladrar())
Entonces, aparecerá por pantalla de usuario el texto:
“guau-guau!”.
Pestaña 5: Método __str__(self): Existe un tipo
especial de método en Python denominado __str__
que se utiliza para hacer imprimible en una sola
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

cadena de caracteres o string todos los valores (o al


menos los más importantes) de los atributos de un
objeto.
def __str__(self):
Se puede observar que este método no tiene ningún
parámetro, teniendo en cuenta que el parámetro self
no cuenta. La definición e implementación completa
del método para nuestra clase perro es la siguiente:

def __str__(self):
return “Soy el perro” + self.nombre
El uso de la palabra reservada return se usa al igual
que en las funciones. En este caso, el signo + usado
entre strings permite concatenarlos. En este sentido,
con las siguientes instrucciones:

p = Perro(“Peluca”, 10)
print(p)
Se crea una instancia denominada p de la clase Perro
usando un constructor de dos parámetros (ver
explicación de métodos constructores).
Adicionalmente, con solo usar el nombre del objeto,
en este caso p, la función print mostrará en la
ventana de usuario el texto:
“Soy el perro Peluca”
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

4 Un Caso Lección 3: Como perros y gatos


Lección 3: Como Perros y Gatos
Simple
Tema 1: Un ejemplo sobre el uso de clases y objetos

Tema 1: Un ejemplo sobre el uso de Clases y


Practiquemos
Objetos
Ingrese al notebook preparado en esta unidad,
verifique la definición e implementación de las clases
gato y perro, y la forma como son creados los objetos
de estas clases e invocados (usados) los métodos de
Parametrizar el texto 2 por medio de bloque de TAPs
cada una de estas.
las pestañas 1, 2 y 3.
Con la definición de estas clases se puede entonces
crear ("darle vida") a objetos o instancias de estas
clases. Esto significa que los objetos existen o tienen
vida solamente en tiempo de ejecución y que tienen
asociado un espacio reservado en la memoria hasta
que el programa finaliza.
Enlace del notebook:
https://colab.research.google.com/drive/1--
OjCzRa4F9YOVrgFDLxkzD1Aom8YaIa?usp=sharing

5 Herencia
Lección 4: Jerarquías de Herencia
Simple Lección 4: Jerarquías de Herencia
Tema 1. Herencia simple
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Texto 1: Si miramos con detalle la definición e


Tema 1. Herencia Simple
implementación de las clases perro y gato del ejemplo
de la lección 3, es posible ver que ambas comparten
los mismos atributos y varios de sus métodos.
Parametrizar con bloque de texto el texto 1.
Existe una forma de evitar esta redundancia de
información y de tratar de factorizarla a través de un Parametrizar el texto 1 por medio de bloque de
mecanismo denominado herencia. La herencia es uno gráfico estático en la que la imagen base sea:
de los conceptos fundamentales del paradigma de
programación orientada a objetos. A través de esta
podemos generalizar (como en este caso) dos o más
clases en una nueva superclase que reúne cosas en
común entre estas. También es posible hablar de
especialización en el sentido contrario, de querer
dividir o especializar una clase en dos o mas subclases.
En esta relación de herencia existe entonces una clase
que se denomina la superclase o clase padre y una
clase que se denomina la subclase o clase hija. La
siguiente imagen ilustra esta relación, que en
términos del lenguaje de modelado UML se dibuja con
un pequeño triángulo que apunta hacia la superclase.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Con esta relación de herencia entonces la clase hija Parametrizar con bloque de texto el texto 1.
“hereda” o puede usar los atributos y métodos de la
superclase sin necesidad de volver a definirlos. Parametrizar el texto 1 por medio de bloque de
Texto 2: Este hecho tiene una cierta analogía con los gráfico estático en la que la imagen base sea:
objetos del mundo real, su clasificación y la aparición
de Jerarquías de herencia.
La siguiente imagen muestra un ejemplo más general
y amplio de una jerarquía de clase de tipos de
estudiantes dentro de un sistema de software que
tiene como contexto llevar las notas de los estudiantes
de la universidad.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Parametrizar con bloque de texto el texto 3.

Parametrizar el texto 3 por medio de bloque de


gráfico estático en la que la imagen base sea:

Observe que podemos mirar esta jerarquía de clases


de abajo hacia arriba como una generalización, o de
arriba hacia abajo como una especialización de clases.
De igual manera, en cada nivel podemos darle a una
clase especifica el rol de SuperClase o de SubClase.
Todo esto es solo una forma de ver la jerarquía de
clases que en últimas es la misma.
Texto 3: En consecuencia, con estas ideas para
nuestro ejemplo de perros y gatos es posible crear una
superclase que denominaremos la clase mascota de
tal manera que se pueda "factorizar" esta redundancia
de información.
La siguiente imagen muestra los detalles de la
definición e implementación de la clase mascota. Esta
clase será la superclase de las clases perro y gato. En
el siguiente tema vamos a ver como se define e
implementan estas clases usando la herencia. Tema 2. Implementación de la relación de Herencia
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Parametrizar con bloque de texto el texto 1.

Parametrizar el texto 1 por medio de bloque de


gráfico estático en la que las imágenes base sean la
imagen A y la imagen B:

Imagen A

Tema 2. Implementación de la relación de Herencia


Texto 1: En el siguiente par de imágenes vamos a ver
el diagrama UML de las clases perro y gato definidas
hasta ahora sin herencia (imagen A) y el diagrama UML
de las clases perro y gato usando herencia y definiendo
para ello la nueva clase Mascota (imagen B).
Se puede observar cómo los atributos y métodos
comunes pasan a la superclase mascota y los métodos
que son diferentes se mantienen en las nuevas clase
hijas perro y gato.
El poder del uso de la herencia en la programación
orientada a objetos es que sin tener que repetir Imagen B
código, las clases hijas o SubClases van a heredar los
atributos y los métodos de la SuperClase.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

En este sentido, los métodos constructores si siguen


siendo propios de cada clase, así como nuevos
atributos específicos o métodos especiales o que solo
tienen sentido en las clases hijas. Para nuestro
ejemplo, los métodos maullar() y ladrar() son propios
de la clase gato y perro respectivamente.
Practiquemos
Texto 1: Ingrese al notebook preparado en esta
unidad, verifique la definición e implementación de la
nueva clase mascota y la forma como se modifican la
definición e implementación de las clases gato y
perro.
La forma de decir en Python que una clase hereda de
otra es a través de escribir justo en frente de la
subclase el nombre de la superclase correspondiente.
En nuestro caso, las siguientes instrucciones definen
esta relación de herencia entre perro y mascota, y
entre gato y mascota:

class Perro(Mascota): # Esta es la forma de decir que


perro hereda de mascota

class Gato(Mascota):
# Esta es la forma de decir que gato hereda de masco
ta Parametrizar con bloque de texto el texto 1.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Revise también la forma en la que son creados los Parametrizar el texto 2 por medio de bloque de
objetos de estas clases e invocados (usados) los gráfico estático en la que la imagen base sean la
métodos de cada una de estas. Compárelo con la siguiente:
versión inicial sin uso de la herencia.
Texto 2: Existe una palabra reservada y una forma del
lenguaje Python denominada super() que se utiliza
para hacer uso explícito de atributos o métodos de la
superclase cuando estamos implementando la
subclase.
Se usa comúnmente en el constructor de una subclase
para invocar el constructor de la superclase y así no
repetir código y asegurarse que no estamos
adicionando nuevos atributos que conflictúen con lo
heredados de la clase padre.
Se ha modificado un poco la clase Gato de nuestro
ejemplo para agregar un nuevo atributo denominado
color.

class Gato(Mascota):
def __init__(self, nombre, edad, color):
super().__init__(nombre, edad)
self.color = color
En la siguiente imagen se puede ver el código
completo. De igual forma, puede practicar con el
notebook de esta sección.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Texto 3: Finalmente, aparece otros dos conceptos


clave de la programación orientada a objetos y
relacionada con la herencia. Se trata de la
redefinición de métodos y el Polimorfismo.
Redefinición de métodos: Es posible que se quiera
volver a definir en una subclase un método que ha sido
heredado de una superclase. En este caso, dentro de
la subclase se vuelve a usar la misma definición del
método, es decir, el mismo nombre y exactamente los
mismos parámetros del método heredado, y se cambia
la implementación, es decir, se redefine.
Observe que en el ejemplo de mascota, gato y perro,
el método __str__() y el método sabesCalcular() son
redefinidos en las subclases gato y perro.
Polimorfismo: Es posible que se quiera volver a definir
en una subclase.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Haga el ejercicio de análisis propuesto al final del


notebook y recuerde que se puede cambiar (quitar o
adicionar) código en el notebook para probar cosas.
Consejo: En estos casos de realizar cambios es bueno
hacer una copia del notebook original para poder
volver al original si algo deja de funcionar con los
cambios).
Enlace del notebook:
https://colab.research.google.com/drive/1--
OjCzRa4F9YOVrgFDLxkzD1Aom8YaIa?usp=sharing

Actividades y evaluación (LMS)

Texto en plataforma
Actividad 1 Actividad 1
Ingrese al notebook preparado en esta unidad,
verifique los ejemplos del uso de envío de mensajes a
objetos de tipo lista (como en el caso de miLista) o
string (como en el caso de cadena) e introduzca
nuevas instrucciones que le permitan terminar de
entender y practicar el paso de mensajes sobre
objetos de algunas de las clases que provee Python.
Enlace del notebook:
https://colab.research.google.com/drive/1--
OjCzRa4F9YOVrgFDLxkzD1Aom8YaIa?usp=sharing
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

7 Actividad 2 Texto en plataforma


Al inicio o en la página de entrada a la actividad poner
el siguiente texto:
Fechas para la realización de la actividad: XX de XX de
XXXX a las XX:XX am/pm

Revisar el video introductorio sobre los fundamentos


de la programación orientada a objetos y hacer las
lecturas de los siguientes textos (archivos en PDF):
• Nier89aSurveyOfOOConcepts.pdf
• ConceptosFundamentales_OrientacionObjetos.pd
f

8 Actividad 3 Texto en plataforma


Al inicio o en la página de entrada a la actividad poner
el siguiente texto:
Fechas para la realización de la actividad: XX de XX de
XXXX a las XX:XX am/pm

Actividad de autoestudio siguiendo el notebook sobre


clase, objetos y herencia. El notebook contiene
material de repaso teórico y práctico de los conceptos
de la unidad con ejemplos y ejercicios para completar.
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Los ejemplos y ejercicios se encaminan como base


para resolver un problema en grupo de la actividad
número 3.
Notebook:
• Fundamentos_OrientacionObjetos(v5).ipynb
Alternativamente (por actualizar):
https://colab.research.google.com/drive/1--
OjCzRa4F9YOVrgFDLxkzD1Aom8YaIa?usp=sharing

9 Actividad 4 Herramienta de asignaciones


Al inicio o en la página de entrada a la actividad poner
el siguiente texto:
Fechas para la realización de la actividad: XX de XX de
XXXX a las XX:XX am/pm

Se deberá entregar un programa hecho en equipo


sobre el uso de la programación orientada a objetos
para resolver un problema de complejidad baja sobre
el cálculo del área de algunas figuras geométricas
básicas como cuadrados, rectángulos, triángulos y
círculos.
Se provee un archivo PDF con los detalles del programa
a desarrollar:
• IntegrarClases_PaqueteFiguras.pdf
Versión 2 FOR-CAEV-IDENTIFICACIÓN EVA_OA 19 de noviembre 2020

Actividad No Actividad No 10. Herramienta de asignaciones


10. Trabajo colaborativo. Ejercicio sobre la descomposición de un Archivos en carpeta Recursos /
problema en pequeños problemas y el uso de funciones para Actividades_30_03_2022
Trabajo resolver cada sub-problema y la forma de integrar de
funciones para resolver el problema inicial.
Diagramar y adjuntar archivos PDF
colaborativo.

Evaluación: Esta semana se otorgará 50 puntos del trabajo de


clase. [evaluación sumativa].

También podría gustarte