Sei sulla pagina 1di 14

Prctica 1

Fundamentos de programacin orientada a objetos


La programacin orientada a objetos (P00)
es un modelo de
programacin que utiliza objetos, ligados mediante mensajes, para la
solucin de problemas. La idea
central es simple: organizar los
programas a imagen y semejanza de la organizacin de los objetos en el
mundo real.
A qu objetos nos referimos? Veamos un ejemplo. Considere una
entidad bancaria. En ella identificamos entidades que son cuentas:
cuenta del cliente 1, cuenta del cliente 2, etc. Pues bien, una cuenta
puede verse como un objeto que tiene unos atributos, nombre, nmero
de cuenta y saldo, y un conjunto de mtodos como Ingresar Dinero,
Retirar Dinero, Abonar Intereses, Saldo Actual, Transferencia, etc.
Ordenar una transferencia de una cuenta a otra podra hacerse as:
cuenta01.Transferencia(cuenta02);

Transferencia sera el mensaje que el objeto cuenta02 enva al


objeto cuenta01, solicitando le sea hecha una transferencia, siendo la
respuesta a tal mensaje
la ejecucin del mtodo Transferencia.
Trabajando a este nivel de abstraccin, manipular una entidad bancaria
resultar muy sencillo.
La idea fundamental de este prctica es que aprenda cmo incorpora C#
los principios de la de la programacin orientada a objetos: clases,
objetos, mensajes y mtodos.

Pensar en objetos
Segn lo estudiado hasta ahora, podramos pensar en un programa
como si fuera una lista de instrucciones que le indican a la mquina qu
hacer. En cambio, desde la POO un programa es un conjunto de objetos
que dialogan entre s para realizar las distintas tareas programadas.
(De cualquier manera el programador tiene que escribir instrucciones,
pero en POO las inserta en los mtodos de las clases, en las cuales suele
apoyarse usando mtodos de otras clases.)

Para aclararlo, consideremos el ejemplo de la entidad bancaria


mencionado anteriormente y pensemos en una concreta: XYZ. Podemos
ver a esta entidad como a un objeto que tiene que comunicarse con
otros muchos objetos (bolsa, otras entidades bancarias, empresas, etc.)
para lograr sus fines: ganar dinero. A su vez, la entidad XYZ tendr un
montn de sucursales distribuidas por toda la geografa. Cada sucursal
es otro objeto, de diferentes caractersticas que la entidad bancaria, que
se comunicar con otras sucursales para satisfacer las peticiones de sus
clientes. Pero y qu es un cliente? Pues otro objeto con sus propias
caractersticas que se comunicar con otros objetos (sucursales, otros
clientes, empresas, etc.) para realizar operaciones desde sus cuentas
(transferencias, cargos, ingresos, etc.). Pero y las cuentas no son
tambin objetos? Evidentemente. Vemos entonces que escribir un
programa de gestin para el banco XYZ supondra crear objetos banco,
sucursal, cliente, cuenta, etc., que deben comunicarse entre s para
poder responder a las operaciones solicitadas en cada momento.

Clases y objetos
Del ejemplo expuesto anteriormente podemos deducir que la POO se
basa en la observacin de que, en el mundo real, los objetos se
construyen a partir de otros objetos. La combinacin de estos objetos es
un aspecto de dicha programacin, pero tambin incluye mecanismos y
caractersticas que hacen que la creacin y el uso de objetos sea
sencillo y flexible. Un mecanismo importantsimo es la clase y el
encapsulamiento y la herencia son dos propiedades o caractersticas
poderosas.
Qu es una clase de objetos? Pongamos un ejemplo: piense en un
molde para hacer flanes; el molde es la clase y los flanes los objetos.
Esto es, si disponemos de un molde de un litro para hacer flanes de
vainilla (ingredientes: leche, vainilla, azcar, etc.), el molde agrupa las
propiedades comunes a todos los flanes de vainilla, pero no todos los
flanes tienen por qu tener la misma cantidad de cada ingrediente. Esto
es, una clase equivale a la generalizacin de un tipo especfico de
objetos, pero cada objeto que construyamos de esa clase tendr sus
propios datos.
Un objeto de una determinada clase se crea en el momento en que
se invoca al operador new para dicha clase. Por ejemplo, la siguiente
lnea crea un objeto de la clase o tipo CCuenta y asigna a la variable
cuenta01 una referencia al mismo.

CCuenta cuenta01 = new CCuenta(); // nueva cuenta

Algunos autores emplean el trmino instancia (traduccin directa de


instance), en el sentido de que una instancia es la representacin
concreta y especfica de una clase; por ejemplo, cuenta01 es una
instancia de la clase CCuenta. Desde este punto de vista, los trminos
instancia y objeto son lo mismo. En este libro se prefiere, no obstante,
utilizar el trmino objeto, o bien ejemplar.
Cuando se escribe un programa utilizando un lenguaje orientado a
objetos, no se definen objetos verdaderos, se definen clases de objetos,
donde una clase se ve como una plantilla para mltiples objetos con
caractersticas similares. Afortunadamente no tendr que escribir todas
las clases que necesite en su programa, porque .NET proporciona una
biblioteca de clases estndar para realizar las
operaciones ms
habituales que podamos requerir.
Mensajes y mtodos
Un programa orientado a objetos se compone solamente de objetos.
Cada uno de
ellos es una entidad que tiene unas propiedades
particulares, los atributos, y unas formas de operar sobre ellos, los
mtodos. Por ejemplo, una ventana de una aplicacin Windows es un
objeto. El color de fondo, la anchura, la altura, etc. son atributos. Las
rutinas, lgicamente transparentes al usuario, que permiten maximizar
la ventana, minimizarla, etc. son los mtodos.
Cuando se ejecuta un programa orientado a objetos, los objetos estn
recibiendo, interpretando y respondiendo a mensajes de otros objetos.
En la POO un mensaje est asociado con un mtodo, de tal forma que
cuando un objeto recibe un mensaje la respuesta a ese mensaje es
ejecutar el mtodo asociado. Por ejemplo, cuando un usuario quiere
maximizar una ventana de una aplicacin Windows, lo que hace
simplemente es pulsar el botn de la misma que realiza esa accin. Eso
provoca que Windows enve un mensaje a la ventana para indicar que
tiene que maximizarse. Como respuesta a este mensaje se ejecutar el
mtodo programado para ese fin.
Un mtodo se escribe en una clase de objetos y determina cmo tiene
que actuar el objeto cuando recibe el mensaje vinculado con ese
mtodo. A su vez, un mtodo puede tambin enviar mensajes a otros
objetos solicitando una accin o informacin. En adicin, los atributos
definidos en la clase permitirn almacenar informacin para dicho
objeto.
Segn lo expuesto, podemos decir que la ejecucin de un
programa orientado a objetos realiza fundamentalmente tres cosas: 1.

Crea los objetos necesarios. 2. Los mensajes enviados a unos y a otros


objetos dan lugar a que se procese internamente la informacin. 3.
Finalmente, cuando los objetos no son necesarios, son borrados.
DISEO DE UNA CLASE DE OBJETOS
Cuando escribimos un programa orientado a objetos, lo que hacemos es
disear un conjunto de clases, desde las cuales se crearn los objetos
necesarios cuando el programa se ejecute. Cada una de estas clases
incluye dos partes fcilmente diferenciales: los atributos y los mtodos.
Los atributos definen el estado de cada uno de los objetos de esa clase
y los mtodos su comportamiento.

Objeto
M

Atributos

Mensajes

Mtodos

Normalmente, los atributos, la estructura ms interna del objeto, se


ocultan a los usuarios del objeto, manteniendo como nica conexin
con el exterior los mensajes. Esto quiere decir que los atributos de un
objeto solamente podrn ser manipulados por los mtodos del propio
objeto. Este conjunto de mtodos recibe el nombre de interfaz: medio
de comunicacin con un objeto.
Escribamos una clase de objetos. Siguiendo el ejemplo comentado al
principio de este captulo, podemos crear una clase de objetos CCuenta
que represente una cuenta bancaria. Abra Visual Studio y cree un nuevo
proyecto de tipo Visual C# > Windows, con la plantilla Aplicacin de
consola, denominado Clase. Cam bie el nombre Program.cs por Test, es
(obsrvese que la clase Program pasa a llamarse Test). Aada al
proyecto un nuevo elemento Class y gurdelo en el fichero CCuenta.cs.
Finalmente, complete la clase siguiendo paso a paso lo indica do a
continuacin:
class CCuenta

{
// Cuerpo de la clase: atributos y mtodos
}

Observamos que para declarar una clase hay que utilizar la palabra
reservada class seguida del nombre de la clase y del cuerpo de la
misma. El cuerpo de la clase incluir entre { y } sus miembros:
atributos y mtodos.
Atributos
Los atributos son las caractersticas individuales que diferencian un
objeto de otro. El color de una ventana Windows la diferencia de otras;
el D.N.I. de una persona la identifica frente a otras; el nmero de una
cuenta la distingue entre otras; etc. Pensando en la clase de objetos
CCuenta, elegimos los atributos de inters que van a definir esta clase
de objetos:

a_nombre: nombre del cliente del banco al que pertenece la


cuenta.
a_cuenta: nmero de la cuenta.
a_saldo: saldo actual de la cuenta.

A_tipoDelnteres: tipo de inters en tanto por cien.

Todos los atributos son definidos en la clase por variables:


class CCuenta
{
private string nombre;
private string cuenta;
private double saldo;
private double tipoDelnteres;
// ...
}

Observe que se han definido cuatro atributos: dos de ellos, nombre y


cuenta, pueden contener una cadena de caracteres. Los otros dos
atributos, saldo y tipoDelnters, son de tipo double.
Anteriormente dijimos que, generalmente, los atributos de un objeto de
una clase se ocultan a los usuarios del mismo. Qu quiere decir esto?
Que un usuario que utilice la clase CCuenta en su programa no podr
escribir su cdigo basado directamente en estos atributos, sino que
tendr que acceder a ellos a travs de los mtodos que implemente la
clase, como veremos a continuacin; de esta forma, un usuario de la
clase CCuenta no podr asignar cualquier valor a los atributos de la

misma. Esta proteccin es la que se consigue justamente con el


modificador private (generalmente se utilizan los modificadores prvate
o public). Un miembro declarado privado (private) es accesible
solamente por los mtodos de su propia clase. Esto significa que no se
puede acceder a l por los mtodos de cualquier otra clase, incluidas las
subclases.
Propiedades y mtodos
El comportamiento de un objeto queda definido por las acciones que
puede em prender. Por ejemplo, pensando acerca de un objeto de la
clase CCuenta, esto es, de una cuenta de un cliente de un determinado
banco, algunas acciones que se pueden realizar sobre ella son:

Asignar el nombre de un cliente del banco a una cuenta.

Obtener el nombre del cliente de una cuenta.


Asignar el nmero de la cuenta.
Obtener el nmero de la cuenta.
Realizar un ingreso.
Realizar un reintegro.
Asignar el tipo de inters.
Obtener el tipo de inters.

Obtener el saldo, esto es, el estado de la cuenta.

Para definir este comportamiento se pueden utilizar tanto mtodos como


propiedades. En general, los mtodos representan acciones que un
objeto puede realizar, mientras que las propiedades representan
informacin sobre un objeto. Segn esto, nombre, nmero de la cuenta,
tipo de inters y saldo podran considerarse propiedades, e ingreso y
reintegro acciones. No obstante, desde el punto de vista
de
compatibilidad con otros lenguajes (por ejemplo con C++) todas las
acciones
enumeradas anteriormente podran implementarse como
mtodos.
Los mtodos son rutinas de cdigo definidas dentro del cuerpo de la
clase, que se ejecutan en respuesta a alguna accin tomada desde
dentro de un objeto de esa clase, o bien desde otro objeto de la misma
o de otra clase. Recuerde que los objetos se comunican mediante
mensajes. El conjunto de mensajes a los que un objeto puede responder
se corresponde con el conjunto de mtodos que implementa su clase.
La clase CCuenta quedara as:
class CCuenta

// Atributos
private string nombre;
private string cuenta;
private double saldo;
private double tipoDelnters;
// Mtodos
public void asignarNombre(string nom)
{
if (nom.Length == 0)
{
System.Console.WriteLine("Error: cadena vacia");
return;
}
nombre = nom;
}
public string obtenerNombre()
{
return nombre;
}
public void asignarCuenta(string cue)
{
if (cue.Length == 0)
{
System.Console.WriteLine("Error: cuenta no vlida");
return;
}
cuenta = cue;
}
public string obtenerCuenta( )
{
return cuenta;
}
public double estado()
{
return saldo;
}
public void ingreso(double cantidad)
{
if (cantidad < 0)
{
System.Console.WriteLine("Error: cantidad negativa");
return;
}
saldo = saldo + cantidad;
}
public void reintegro(double cantidad)

if (saldo - cantidad < 0)


{
System.Console.WriteLine("Error: no dispone de saldo");
return ;
}
saldo = saldo - cantidad;

public void asignarTipoDeInters(double tipo)


{
if (tipo < 0)
{
System.Consol.WriteLine("Error; tipo no vlido");
return;
}
tipoDelnters = tipo;
}

public double obtenerTipoDeInters()


{
return tipoDelnters;
}

La siguiente clase utiliza la clase CCuenta:


class Test
(
public static void Main(string[] args)
{
CCuenta cuentaOl = new CCuenta();
cuentaOl.asignarNombre("Un nombre);
cuentaOl.asignarCuenta("Una cuenta");
cuentaOl.asignarTipoDeInters(2.5);
cuentaOl.ingreso( 10000);
cuentaOl.reintegro(5000);
System.Console.WriteLine(cuentaOl.obtenerNombre());
System.Console.WriteLine(cuentaOl.obtenerCuenta());
System.Console.WriteLine(cuentaOl.estado());
System.Console.WriteLine(cuentaOl.obtenerTipoDeInters());

}
Veamos otro ejemplo:
Pensemos en una aplicacin de tipo grfica en donde requerimos
manipular
rectngulos.
Podramos
crear
una
clase
denominada Rectangulo, que describa las caractersticas comunes a
estas figuras planas que son las siguientes:

El origen del rectngulo: el origen o posicin de la esquina superior


izquierda del rectngulo en el plano determinado por dos nmeros
enteros x e y.

Las dimensiones del rectngulo: ancho y alto, otros dos nmeros


enteros.

Los atributos seran entonces: x, y, ancho y alto.


Y los mtodos podran ser por ejemplo:

Calcular el rea del rectngulo

Desplazar el rectngulo a una posicin determinada.

Checar si cierto punto esta no dentro del rectngulo.

Los contructores
Un objeto de una clase se crea llamando a una funcin especial
denominada constructor de la clase. El constructor se llama de forma
automtica cuando se crea un objeto, para situarlo en memoria e
inicializar los miembros dato declarados en la clase. El constructor tiene
el mismo nombre que la clase. Lo especfico del constructor es que no
tiene tipo de retorno.
class Rectangulo
{
int x;
int y;
int ancho;
int alto;
Rectangulo(int x1, int y1, int w, int h)

{
x=x1;
y=y1;
ancho=w;
alto=h;
}
}
El constructor recibe cuatro nmeros que guardan los
parmetros x1, y1, w y h, y con ellos inicializa los miembros
dato x, y, ancho y alto.
Una clase puede tener ms de un constructor. Por ejemplo, el siguiente
constructor crea un rectngulo cuyo origen est en el punto (0, 0).
class Rectangulo
{
int x;
int y;
int ancho;
int alto;
Rectangulo(int w, int h)
{
x=0;
y=0;
ancho=w;
alto=h;
}
}
Este constructor crea un rectngulo de dimensiones nulas situado en el
punto (0, 0),
class Rectangulo
{
int x;
int y;
int ancho;
int alto;
Rectangulo()
{
x = 0;
y = 0;
ancho = 0;
alto=0;
}

}
Con estas porciones de cdigo definimos la clase, y la guardamos en un
archivo que tenga el mismo nombre que la clase Rectangulo.
public class Rectangulo
{
int x;
int y;
int ancho;
int alto;
public Rectangulo()
{
X = 0;
Y = 0;
ancho = 0;
alto = 0;
}
public Rectangulo(int x1, int y1, int w, int h)
{
x = x1;
y = y1;
ancho = w;
alto = h;
}
public Rectangulo(int w, int h)
{
x = 0;
y = 0;
ancho = w;
alto = h;
}
int calcularArea()
{
return (ancho * alto);
}
void desplazar(int dx, int dy)
{
X += dx;
Y += dy;
}
boolean estaDentro(int x1, int y1)
{
if( (x1 > x) && (x1 < x + ancho) && (y1 > y) && (y1 < y +
ancho) )

{
return true;
}
return false;
}
}

Varios constructores
Como se muestra en el ejemplo anterior, podemos definir varios
constructores. De esta manera podramos construir un rectngulo con la
siguiente instruccin
Rectangulo rect1=new Rectangulo(10, 20, 40, 80);
La instruccin new reserva espacio en memoria para los miembros dato
y devuelve una referencia que se guarda en la variable rect1 del
tipo Rectangulo que denominamos ahora objeto. Dicha sentencia, crea
un objeto denominado rect1 de la clase Rectangulo llamando al segundo
constructor en el listado. El rectngulo estar situado en el punto de
coordenadas x=10, y=20; tendr una anchura de ancho=40 y una altura
de alto=80.
La instruccin
Rectangulo rect2=new Rectangulo(40, 80);
Crea un objeto denominado rect2 de la clase Rectangulo llamando al
tercer constructor, dicho rectngulo estar situado en el punto de
coordenadas x=0, y=0; y tendr una anchura de ancho=40 y una altura
de alto=80.
La instruccin
Rectangulo rect3=new Rectangulo();
Crea un objeto denominado rect3 de la clase Rectangulo llamando al
primer constructor, dicho rectngulo estar situado en el punto de
coordenadas x=0, y=0; y tendr una anchura de ancho=0 y una altura
de alto=0.

Acceso a los miembros

Desde un objeto se puede acceder a los miembros mediante la siguiente


sintaxis
objeto.miembro;
Por ejemplo, podemos acceder al miembro dato ancho, para cambiar la
anchura de un objeto rectngulo.
rect1.ancho=100;
El rectngulo rect1 que tena inicialmente una anchura de 40, mediante
esta sentencia se la cambiamos a 100.
Desde un objeto llamamos a las funciones miembro para realizar una
determinada tarea. Por ejemplo, desde el rectngulo rect1 llamamos a la
funcin calcularArea para calcular el rea de dicho rectngulo.
rect1.calcularArea();
La funcin miembro area devuelve un entero, que guardaremos en una
variable entera medidaArea, para luego usar este dato.
int medidaArea=rect1.calcularArea();
System.out.println("El rea del rectngulo es "+medidaArea);
Para desplazar el rectngulo rect2, 10 unidades hacia la derecha y 20
hacia abajo, escribiremos
rect2.desplazar(10, 20);
Podemos verificar mediante el siguiente cdigo si el punto (20, 30) est
en el interior del rectngulo rect1.
if(rect1.estaDentro(20,30)){
System.out.println("El punto est dentro del rectngulo");
}else{
System.out.println("El punto est fuera del rectngulo");
}
rect1.estaDentro() devuelve true si el punto (20, 30) que se le pasa a
dicha funcin miembro est en el interior del rectngulo rect1,
ejecutndose la primera sentencia, en caso contrario se ejecuta la
segunda.
Como veremos ms adelante no siempre es posible acceder a los
miembros, si establecemos controles de acceso a los mismos.

public class RectanguloApp1 {


public static void main(String[] args) {
Rectangulo rect1=new Rectangulo(10, 20, 40, 80);
Rectangulo rect2=new Rectangulo(40, 80);
Rectangulo rect3=new Rectangulo();
int medidaArea=rect1.calcularArea();
System.out.println("El rea del rectngulo es "+medidaArea);
rect2.desplazar(10, 20);
if(rect1.estaDentro(20,30)){
System.out.println("El punto est dentro del rectngulo");
}else{
System.out.println("El punto est fuera del rectngulo");
}
}
}
Ejercicios:
1. Proponga varios ejemplos de Objeto y algunos de sus Atributos y
mtodos correspondientes.
2. En la clase CCuenta escriba un constructor que permita definir los
valores iniciales para los atributos de la clase.

Potrebbero piacerti anche