Está en la página 1de 10
Programación orientada a objetos. Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida La orientación

Programación orientada a objetos.

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

La orientación a objetos es una forma natural de pensar en relación con el mundo y de escribir programas para los computadores que establece un nuevo paradigma de la programación producto de la evolución natural de la misma. Su idea básica parte de que percibimos al mundo que nos rodea como una variedad de objetos y la necesidad de tratar de representarlo como tal.

Naturalmente otros paradigmas de programación lo antecedieron como fueron el imperativo, el funcional y el de programación lógica.

“La visión orientada a objetos nos obliga a reconsiderar nuestras ideas acerca de la computación, de lo que significa ponerla en práctica y de cómo debería estructurarse la información “

Timothy Budd Introducción a la Programación Orientada a Objetos

1

La clave de la POO es encontrar características comunes entre entidades implicadas en el problema y crear estructuras de datos que capturen esas características comunes. Una vez creadas estas estructuras habrá que definir sus características y modelar su comportamiento.

Tratemos de ilustrar en este punto algunas de las principales ideas de la programación orientada a objetos viendo cómo manejaríamos una situación del mundo real, y qué conceptos nos brinda esta técnica para modelar esta situación en un computador.

Conceptos Básicos: Clases, Objetos, Mensaje, Atributo, Método

Imaginemos una Terminal de trenes con un grupo de máquinas capaces de realizar un conjunto de acciones y lo que se quiere es presentar el algoritmo que debía seguir cualquier usuario para obtener un ticket a un destino específico utilizando una máquina expendedora de tickets, más específicamente la máquina que denominamos ticketLugania.

Situación

En la Terminal de trenes de una ciudad X existe un conjunto de máquinas traga monedas que brindan un sinnúmero de servicios (pesado, expendio de gaseosas, cigarrillos, etc…) Dentro de este conjunto de máquinas están las dedicadas a la venta de tickets para los distintos destinos que tienen los trenes de la Terminal. Las mismas funcionan insertándoles monedas hasta tanto se cubra el monto para el que fueron construidas, en dependencia del destino, dando la posibilidad, mediante un botón, de poder imprimir seguidamente el ticket deseado. La máquina tiene otras opciones de información a través de botones para conocer el precio del ticket y el balance del dinero insertado por cada usuario; lleva también un control interno sobre el dinero total recaudado en el día.

Para ganar un poco en simplicidad y poder explicar mejor los conceptos que trataremos posteriormente supongamos que la persona que compra el ticket en nuestra maquina siempre deposita el dinero exacto para pagarla. Por lo que nuestro diagrama de bloques quedaría de la siguiente forma

1 “Introducción a la programación orientada a objetos”, Timoty Budd, pp.5

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida Acciones Respuestas ticketLugania.Balance() Dinero

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

Acciones

Respuestas

ticketLugania.Balance()

Dinero

ticketLugania.Precio()

Dinero

ticketLugania.Inserta(moneda)

Pagado

ticketLugania.Imprime()

-

Algoritmo

Inicio
Inicio

ticketLugania.Precio()

ticketLugania.Inserta(5 c) Pagado
ticketLugania.Inserta(5 c)
Pagado

ticketLugania.Imprime()

Fin
Fin

Razonemos cuál fue el mecanismo que utilizó nuestro usuario para solucionar su problema. En primer lugar seleccionó un objeto apropiado (Máquina de tickets) para a través de un mensaje enviarle su solicitud de ejecución de una acción determinada (consultar el precio del ticket). Una vez aceptada esta solicitud es responsabilidad de la máquina dar respuesta a la misma y para lograrlo seguro empleó un método, es decir, un algoritmo o conjunto de operaciones. Desde su posición al usuario no le interesa conocer los detalles de los pasos seguidos por esta máquina para cumplir su pedido (encapsulamiento). No obstante si llevara un destornillador y decidiera husmear un poco en el interior de ella podría apreciar a lo mejor que para la ejecución de la acción una de las operaciones fue enviar un mensaje algo diferente a otro objeto presente en la máquina (pantalla) solicitando que ejecutara la acción de imprimir un mensaje (precio del ticket) y así sucesivamente.

Como ven todas las operaciones que se llevaron a cabo se desencadenaron debido al mensaje original enviado a la máquina, por lo que estudiemos más de cerca qué papel juegan los mismos en la POO.

Mensajes. En la programación orientada a objeto, cualquier acción se inicia mediante la transmisión de un mensaje a un agente (un objeto) responsable de la acción. El mensaje tiene codificada la petición de una acción y se acompaña de cualquier información adicional (argumentos) necesaria para llevar a cabo la petición. El receptor es el agente al cual se envía el mensaje. Si el receptor acepta el mensaje, acepta la responsabilidad de llevar a

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida cabo la acción indicada. En respuesta

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

cabo la acción indicada. En respuesta a un mensaje, el receptor ejecutará algún método para satisfacer la petición 2 .

Es bueno recordar la importancia de seleccionar un receptor adecuado para que pueda interpretar correctamente nuestro mensaje. En el ejemplo anterior si hubiese seleccionado a una máquina expendedora de refrescos para que me imprimiera un ticket estaría cometiendo un error pues puede ser que la misma no tenga un método para resolver el problema. Por lo que otra pieza elemental dentro de la POO son los receptores, a los cuales llamaremos Objetos.

TÉRMINO Objeto. Entidad que tiene una estructura de datos interna bien definida, el cual tendrá
TÉRMINO
Objeto. Entidad que tiene una estructura de datos interna bien definida, el cual
tendrá la capacidad de realizar un conjunto de acciones que describen su
comportamiento, como respuesta a un mensaje determinado.
Objeto
=
Datos
+ Acciones

Para el caso que estamos estudiando, el objeto con el cual interactuamos -máquina ticketLugania- cuenta con un conjunto de acciones que es capaz de realizar, pero ¿Cuáles serían los datos que según el concepto tiene nuestro objeto?

Si volvemos a la situación nos daremos cuenta de que hay información que la máquina debe “memorizar” para lograr un correcto funcionamiento. En primer lugar tenemos el precio del ticket sin el cual no se podría poner en funcionamiento nuestra máquina. Y en segundo lugar, no por ello menos importante, el balance y la cantidad total recaudada por la máquina que aunque no impiden su funcionamiento son opciones de información con que cuenta.

Precio 0.20 Balance 0.00 Total 30.00 Lugania
Precio 0.20
Balance 0.00
Total 30.00
Lugania

2 “Introducción a la programación orientada a objetos”, Timoty Budd, pp.4

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida Pero no solo la máquina de

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

Pero no solo la máquina de ticket con destino “Lugania” tiene la capacidad de realizar estas acciones y “memorizar” esta información. Cualquier otra máquina de ticket de nuestra Terminal tiene esa capacidad sin importar su destino, por lo que no parece descabellado decir que todas ellas pertenecen a una misma “clase” de objetos, la clase Máquina de tickets.

precio 0.20 balance 0.00 total 30.00 Lugania
precio 0.20
balance 0.00
total 30.00
Lugania
precio 1.00 balance 0.50 total 100.00 Baltica
precio 1.00
balance 0.50
total 100.00
Baltica
precio 0.10 balance 0.00 total 50.00 Atlanti
precio 0.10
balance 0.00
total 50.00
Atlanti
Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida Precisamente este es uno de los

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

Precisamente este es uno de los principios más importantes dentro de la Programación Orientada a Objetos:

Todos los objetos pertenecen a una clase en específico, pero ¿Qué son las clases?

Lo más importante es la consideración de que los objetos pueden ser agrupados según sus características. Esta idea viene de la vida cotidiana. En la práctica los seres humanos pensamos de esta manera: el mundo que nos rodea está formado por objetos relacionados entre sí según determinados criterios. A estas agrupaciones de objetos se les denomina clases.

TÉRMINO Clase. Descripción de objetos con características comunes, tienen un conjunto de atributos para definir
TÉRMINO
Clase. Descripción de objetos con características comunes, tienen un conjunto
de atributos para definir los datos que serán guardados por el objeto y un
conjunto de métodos que precisan las acciones que este puede realizar.
Clase
=
Atributos + Métodos

Pero no veamos las clases como una mera forma de agrupar aquellos objetos que tienen características comunes, sino como el recurso que brinda la POO para crear objetos o instancias con características comunes. Es decir que para nuestro caso de estudio necesariamente debe existir una clase máquina de ticket -que describa los atributos de cada objeto y sus métodos- a partir de la cual se puedan crear todas las instancias necesarias para ser utilizadas en la Terminal.

Esto garantiza que tanto la máquina ticketLugania como ticketBaltica al ser instancias de la clase máquina de ticket tengan como atributos su precio, balance y total recaudado. Además garantiza que ambas respondan de manera adecuada ante un mismo mensaje.

Instancia

Mensaje

Respuesta

ticketLugania

ticketLugania.Precio()

0.20

ticketBaltica

ticketBaltica.Precio()

1.00

Todos los objetos de una clase tienen la misma funcionalidad, o sea, responden de la misma manera ante los mismos mensajes.

TÉRMINO TÉRMINO
TÉRMINO
TÉRMINO

Atributo. Pequeña porción de memoria dentro del objeto que es utilizada para almacenar valores cuyo rango y características están perfectamente definidas en la clase.

Método. Bloque de operaciones presentes en las clases para darle funcionalidad. Su ejecución ocurre como respuesta de un objeto ante un mensaje determinado.

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida De la definición anterior podemos deducir

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

De la definición anterior podemos deducir que un objeto solamente puede responder adecuadamente a un mensaje si en la clase a la que pertenece está presente el método adecuado para darle respuesta, y a su vez este solamente se ejecuta si una instancia de la clase lo solicita a través de un mensaje.

Ejemplo: ticketLugania.Precio()

Antes de pasar al siguiente punto podemos resumir que un programa OO es una secuencia de mensajes entre objetos para la solución de un problema donde uno de ellos puede ser un cliente (que solicita una acción) y otro un servidor (que brinda el resultado), en dependencia de cómo estén definidos sus comportamientos en las clases a las que pertenecen.

Mensaje
Mensaje

Objetos

Notación UML para describir clases y objetos.

De forma general representaremos las clases de la siguiente forma:

Nombre de la clase

Atributos

Métodos

y a los objetos como:

Nombre del objeto : Clase

Atributo = valor

Nombre del objeto : Clase Atributo = valor

Vale aclarar algunas reglas de notación iniciales:

Para tener una adecuada organización, los nombres de las clases siempre deben comenzar con mayúsculas y antecedidos con la letra C, si el nombre de una clase contiene más de una palabra deberán ir unidas y cada una debe comenzar con mayúsculas. Ejemplos de nombres de clases: CPersona, CFiguraGeometrica, CVehiculoAutomotor, etc Los nombres de los objetos serán siempre en minúsculas y estarán subrayados. Los nombres de
Los nombres de los objetos serán siempre en minúsculas y estarán subrayados. Los nombres de los atributos comenzarán con minúsculas, si tienen más de una palabra las restantes deben comenzar con mayúsculas, todas las palabras irán unidas.una debe comenzar con mayúsculas. Ejemplos de nombres de clases: CPersona, CFiguraGeometrica, CVehiculoAutomotor, etc

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida Los nombres de los métodos seguirán

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida Los nombres de los métodos seguirán la

Los nombres de los métodos seguirán la misma regla que los nombres de clases sin anteponerles la C al principio.

Utilicemos entonces la notación UML para representar la clase y los objetos del caso de estudio.

CLASE

OBJETO

OBJETO

CMaquinaTicket

ticketLugania: CMaquinaTicket

ticketBaltica: CMaquinaTicket

precio

precio = 0.20 balance = 0.00 total = 30.00

precio = 1.00 balance = 0.50 total = 100.00

balance

total

Precio()

   

Balance()

Imprime()

Inserta(moneda)

Como pueden apreciar la principal diferencia entre dos objetos de una misma clase está en la información que almacenan sus atributos, puesto que ambos tienen la capacidad de responder al mismo conjunto de mensajes al estar esta determinada por los métodos de la clase a la que pertenecen. No obstante el hecho de que dos objetos de una misma clase en un momento dado tengan los mismos valores en sus atributos, no quiere decir que estos dos objetos sean el mismo, puesto que independientemente de ello cada uno tiene su identidad única. Este fenómeno es muy común en la vida real por ejemplo: Puede darse el caso que existan dos máquinas de tickets de un mismo destino que en un momento determinado tengan igual balance y total recaudado, lo cual no quiere decir que sean la misma máquina.

La orientación a objetos no es solo clases, objetos y mensajes, también considera otros aspectos como la abstracción, la herencia, el polimorfismo y el encapsulamiento,

TÉRMINOla herencia, el polimorfismo y el encapsulamiento, TÉRMINO Abstracción. Descripción de las especificaciones

TÉRMINOla herencia, el polimorfismo y el encapsulamiento, TÉRMINO Abstracción. Descripción de las especificaciones de un

Abstracción. Descripción de las especificaciones de un sistema haciendo énfasis en los detalles que son significantes para el programador o para el usuario y obviando aquellas que no lo son.

Encapsulamiento. Se refiere a ocultar qué hay dentro del objeto, de no mostrar cómo se llevan a cabo las acciones.

La forma de graficar las clases que vimos anteriormente no es la manera precisa de representarlas en el dominio de cualquier lenguaje de programación.

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida Presentemos a continuación la manera correcta

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

Presentemos a continuación la manera correcta de definir las clases en C++. Para ello utilizaremos la sintaxis siguiente:

class <nombre de la clase>

{

// Cuerpo de la clase

};

<nombre de la clase> { // Cuerpo de la clase }; Atributos Métodos Aclaremos algunos detalles

Atributos

Métodos

Aclaremos algunos detalles en la siguiente declaración que serán válidos para las posteriores sintaxis de instrucciones que veremos más adelante y que seguiremos ampliando según haga falta.

1. < > Encerraremos entre ellas aquella parte de la sintaxis cuya escritura es obligatoria.

2. // Son las llamadas líneas de comentario. Son utilizadas para ayudar al lector a la comprensión de un código.

3. [ ] Lo utilizamos para precisar la parte de la instrucción que es opcional

Ejemplo:

class CMaquinaTicket

{

// Cuerpo de la clase

};

Como se indicó, en el cuerpo de la clase se definen los atributos y los métodos encargados de proporcionar las características particulares y el comportamiento de los objetos. Estudiémoslo por partes para una mejor comprensión.

Atributos.

class CMaquinaTicket

{

 

float precio;

float balance;

float total;

// Métodos

};

Noten que cada atributo está precedido por un término, el cual va a describir el tipo de dato con el que están asociados, en los lenguajes de programación a esta asociación se le da el nombre de declaración. Pero antes de explicar mejor sus partes, estudiemos un concepto que está muy relacionado con la misma.

Este concepto está dado por la característica que tienen los atributos de guardar valores que pueden variar con el tiempo. Es por eso que también son conocidos como variables.

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida TÉRMINO Variables. Son zonas de memoria

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

TÉRMINO
TÉRMINO

Variables. Son zonas de memoria que pueden cambiar de valor durante la ejecución del programa por medio de una asignación y que se acceden mediante identificadores. En nuestro caso los atributos son igualmente variables lo que las nombramos de esta manera por encontrarse estas dentro de una clase.

Analicemos por partes la sintaxis general de una declaración de variables

o Tipos de Datos

<tipo> Los tipos de datos determinan la naturaleza del conjunto de valores que puede tomar una variable y las operaciones que se pueden realizar con ellas. Las variables en C++ pueden declararse prácticamente en cualquier parte del programa, aunque se aconseja hacerla al inicio de cada bloque de instrucciones.

C++ ofrece un conjunto de tipos de datos básicos que pueden cambiar su rango utilizando los modificadores: unsigned (sin signo), signed (con signo), long, short.

Tipo de dato

Valores que

 

Rango

almacena

 

int, long

enteros

-2,147,483,648 <= X <= 2,147,483,647

float

reales

1.18

10^-38 < |X| < 3.40 10^38

double

reales

2.23

10^-308 < |X| < 1.79 10^308

char

caracteres

 

-128 <= X <= 127

short int

enteros

 

-32,768 <= X <= 32,767

long double

reales

3.37

10^-4932 < |X| < 1.18 10^4932

string 3

cadena

 

--

El modificador signed y unsigned se utilizan en los tipos de datos numéricos para especificar si tienen signo o no. Un dato de tipo numérico unsigned duplica su rango ejemplo:

Tipo

unsigned

signed

short int

0 <= X <= 65,534

-32,768 <= X <= 32,767

Por defecto un tipo de dato entero es signed

o Identificador

<identificador> Secuencia de caracteres que sirve para identificar una posición en la memoria de la computadora, que nos permite acceder a su contenido. Los identificadores representan los datos de un programa (constantes, variables, tipos de datos, nombres de funciones o métodos, nombres de archivos).

Reglas para formar un identificador - Un identificador se forma con una secuencia de caracteres (minúsculas de la a a la z; mayúsculas de la A a la Z; dígitos del 0 al 9 y el carácter subrayado o underscore (_)). - Un identificador no puede contener espacios en blanco, ni otros caracteres distintos de los citados, como por ejemplo (#, $, %, *, &, etc.).

3 Aunque no es un tipo de los básicos de C++ lo utilizaremos como tal

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida - El primer caracter de un

Facultad de Ingenierías Conceptos de POO MsC. Juniel Almeida

- El primer caracter de un identificador debe ser siempre una letra o un (_), es decir, no puede ser un dígito.

- Se hace distinción entre letras mayúsculas y minúsculas. Así, Masa es considerado como un identificador distinto de masa y de MASA.

- La longitud puede ser hasta de 31 caracteres.

Existen palabras que tienen un significado predefinido en el lenguaje, son las llamadas palabras reservadas y no pueden ser utilizadas como identificadores. Ejemplo: class, private, public, void, int, float, char, bool, long, short, unsigned, signed, break, continues, if, else, for, while, do, const, return.

Los identificadores deben no solo ser válidos sino que deben autodocumentar su programa, es decir, tener nombres que permitan conocer a simple vista qué representan, utilizando para ello tantos caracteres como sean necesarios. Esto simplifica enormemente la tarea de programación y sobre todode corrección y mantenimiento de los programas. Es cierto que los nombres largos son más laboriosos de teclear, pero en general resulta rentable tomarse esa pequeña molestia.

Ejemplos de identificadores válidos:

Identificadores no válidos:

SumaTotal

Suma Total

Max

1_variable

max

VariableNoVálida

valor1

x+y

valor_1

cantidad_en_$

Esta_es_una_variable

%total

_identificador

int

[, identificador, …]

Esta parte de la declaración indica que se pueden declarar otras variables del mismo tipo separando los identificadores de ellas por comas.

Ejemplo de declaraciones correctas de variables

Declaración

Objetivo de la Declaración

char sexo

Guardar en la variable sexo la letra „F‟ o „M‟

int edad, noCI

Guardar un valor entero probablemente no superior a 150 para el caso de la edad

float precio

Guardar un valor decimal con una precisión baja

Ejemplo de declaraciones incorrectas de variables

Declaración

Objetivo de la Declaración

Motivo del Error

char nombre

Guardar en la variable el nombre de una persona

El tipo char sólo admite una letra

float edad

Guardar una letra

Este tipo es utilizado para valores reales y el identificador no guarda relación con la información que guarda

int promedio General

Guardar un valor decimal con una precisión baja

Sólo almacena valores enteros y mal uso del identificador