Está en la página 1de 36

E

l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Tema 1: POO
Programacin
Orientada a Objeto
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

DESCRIPCIN
Clases
Herencia
Polimorfismo
Encapsulamiento
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

CLASES
Terminologa de las Clases
Mtodos, Eventos, Sobrecarga de mtodos
Propiedades
Constructores
Tiempo de vida de un objeto

Terminologa de las Clases 1
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Una Clase en la programacin orientada a objetos es una
categora generalizada que describe un grupo de artculos
ms especficos llamados objetos los cuales pueden existir
dentro de la misma.
Un Constructor es un mtodo que le permite al programador
establecer valores predeterminados, limitar la instanciacin y
escribir programas que sean flexibles y fciles de leer.
Un Evento es una accin o suceso generalmente producido
por el usuario y para el cual puede responder un programa
(por ejemplo: presionar teclas, hacer clic o mover el mouse).
Un Mtodo en la programacin orientada a objetos es un
proceso ejecutado por un objeto cuando este recibe un
mensaje.
Terminologa de las Clases 2
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Objeto En la POO es una variable que contiene rutinas y
datos que se procesan como una entidad discreta.
La POO es un paradigma de la programacin en el cual un
programa se ve como una coleccin de objetos discretos que
se encuentran contenidos en estructuras de informacin y
rutinas que interactan con otros objetos.
Propiedad- miembros de una clase que proporcionan un
mecanismo flexible para leer, escribir o calcular los valores de
campos privados. Las propiedades se ven o se pueden
acceder a travs de los descriptores (get{ }) dentro de la
clase y se pueden cambiar o modificar a travs de de los
descriptores (set{ }) dentro de la clase.
Objetos y Clases. La Relacin.
Los objetos son instancias de un tipo de informacin
dada. El tipo de informacin proporciona un modelo para
el objeto creado (o instanciado) cuando se ejecuta la
aplicacin.
Los nuevos tipos de datos se definen utilizando
clases.
Las clases son los bloques bsicos en las aplicaciones
en C# y contienen el cdigo y datos. Una aplicacin C#
siempre tendr por lo menos una clase.
Objetos y Clases. Comparativo.
Un objeto pertenece a una clase y es una instancia de
dicha clase. La clase es el modelo del objeto y define
los campos y los mtodos.
El objeto existe durante el tiempo de ejecucin y se
debe declarar y construir de manera explcita por el
programa ejecutante. Para la mayora de los lenguajes
de programacin, no se puede cambiar una clase
durante la ejecucin de un programa.
Las clases tienen campos que pueden cambiar en valor
y mtodos que se pueden llevar a cabo durante la
ejecucin de un programa. La clase a la cual pertenece
el objeto, define estos atributos y mtodos.
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Representacin de Clases segn UML
Clases Estereotipadas
Los estereotipos permiten tomar elementos propios de UML y
convertirlos en otros. La finalidad es extender a un elemento
UML. Se representan encerrados entre << y >>






Nota: Se estereotipa el atributo categorizacin, indicando que
existe un elemento UML que habr de revisar

Trabajador
- nombre : string
- edad : byte
- <<categorizacin>> sueldo

+ Contratacin( ) : int
+ Vacaciones( )
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Representacin de Clases segn UML
Restricciones
Es un texto libre encerrado entre llaves { y } que especifica
una o varias reglas que definirn la validacin en la DB


{ edad >= 18 y edad <= 60 }



Nota: Se aplica la regla para que la edad est comprendida
entre 18 y 60 aos
Trabajador
- nombre : string
- edad : byte
- <<categorizacin>> sueldo

+ Contratacin( ) : int
+ Vacaciones( )
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Representacin de Clases segn UML
Notas Adjuntas
Se utiliza para agregar una nota descriptiva de la Clase,
Atributo u Operacin






Trabajador
- nombre : string
- fono : string
- <<categorizacin>> sueldo

+ Contratacin( ) : int
+ Vacaciones( )
fono esta compuesto por:
Cdigo del Pas
Cdigo de Regin
Cdigo de Zona
Nmero
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Propiedades
Las propiedades se pueden usar como si fueran miembros
pblicos de datos pero en realidad son mtodos especiales
llamados descriptores. Esto permite el acceso a los datos de
manera fcil a la vez que proporciona la seguridad y la
flexibilidad de los mtodos.




E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Ejemplo de Propiedad
public class Rectangle
{ private double length;








}
public double Length
{
get { return length; }
set {
if (value > 0) length = value;
}
}
:

E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Constructores
Los constructores son mtodos de clase los cuales se
ejecutan cuando se crea un objeto de un determinado tipo. Los
constructores tienen el mismo nombre que la clase y por lo
general inicializan los miembros de datos del nuevo objeto.




E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Ejemplo de Constructor con argumento
public class Rectangle
{
:






}
public Rectangle(double l, double w)
{
length = l;
width = w;
}


Invocacin al constructor de una clase base
Basado en que una clase no puede heredar de ms de
una clase, no existir ambigedad al utilizar la palabra
clave base para invocar al constructor de una clase
base, utilizando la sintaxis:
class ClaseD : ClaseB
{
public ClaseD (int n1) : base(n1)
//se invoca al constructor de la clase ClaseB
{

}
}

E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Mtodos
Un mtodo es un bloque de cdigo que contiene una serie de
sentencias. Cada instruccin que se ejecuta, se lleva a cabo en
el contexto de un mtodo.
public class Rectangle
{






}





public void Magnify (int factor)
{
length *= factor;
width *= factor;
}


E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Uso de la Clase Rectangle
Ejemplo 1
public class ShapeProgram
{
public static void Main()
{
Rectangle rec1 = new Rectangle(10,20);
rec1.magnify(3);
Console.WriteLine(Longitud + rec1.length);
Console.WriteLine(Ancho + rec1.width);
}
}


E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Uso de la Clase Rectangle
Ejemplo 2
public class Window
{
Rectangle outerFrame;
Rectangle innerFrame;
public Window ( )
{ outerFrame = new Rectangle(10,8);
innerFrame = new Rectangle(8,6);
}
public void enlargeWindow( )
{ outerFrame.magnify(2); }
}


E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Recursividad
La recursividad ocurre cuando se usa un mtodo para
resolver otra versin del mismo problema.
Con cada repeticin, el problema se hace ms fcil y
avanza a un caso base.
El caso base se alcanza cuando no se requiere ninguna
otra iteracin.
Un caso base es el punto en el cual ya no se realiza
ninguna otra iteracin.





E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Ejemplo de Recursividad 1

public int fact (int n)
{
if (n == 1)
return 1;
else
return n * fact(n - 1);
}




int result = fact(4);
Console.WriteLine(La respuesta final es + result);





fact (4)
4* fact (3)
fact (3)
3* fact (2)
fact (2)
2* fact (1)
fact (1)
fact (4)
24
6
2
1
ite-1
ite-2
ite-3
Ite-4
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Ejemplo de Recursividad 2
public int identity (int num)
{ if (nmu < 1)
return 10;
else
return num + identity (num - 2);
}
int result = identity(6); Console.WriteLine(La respuesta final es + result);


Identidad (6) 6 + identidad (4) 22
Identidad (4) 4 + identidad (2) 16
Identidad (2) 2 + identidad (0) 12
Identidad (0) 10






Identidad (num) Acciones suspendidas Regresar a la pila
Caso base
Llamada recursiva
Avance hacia el Caso base
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Ejercicios de Recursividad
public int negative(int num)
{ if(num >= 20)
return -5;
else
return negative(num + 4) + 2 * num;
}
int result1 = negative(-3); Console.WriteLine(La respuesta es + result1);


public int product(int num)
{ if(num > 20)
return -1;
else
return num * product(-2 * num);
}
int result2 = product(1); Console.WriteLine(La respuesta es + result2);


1
2
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Uso de mtodos sobrecargados
Declaracin de mtodos sobrecargados
Firmas de mtodos
Uso de mtodos sobrecargados
Declaracin de mtodos sobrecargados
Mtodos que comparten un nombre en una clase
Se distinguen examinando la lista de parmetros
class OverloadingExample
{
static int Suma(int a, int b)
{
return a + b;
}
static int Suma(int a, int b, int c)
{
return a + b + c;
}
static void Main( )
{
Console.WriteLine(Suma(1,2) + Suma(1,2,3));
}
}
Firmas de mtodos
Las firmas de mtodos deben ser nicas dentro de una
clase
Definicin de firma
Nombre del mtodo
Tipo_dato de parmetro
Cantidad de parmetros

Forman la definicin
de la firma
Nombre de parmetro
Modificador de
acceso del mtodo
Tipo de retorno
No afectan a la
firma
Uso de mtodos sobrecargados
Conviene usar mtodos sobrecargados si:
Hay mtodos similares que requieren parmetros
diferentes
Se quiere aadir funcionalidad al cdigo existente

No hay que abusar, ya que:
Son difciles de depurar
Son difciles de mantener
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

El Sistema de Tipos Comunes (CTS)
Aspectos Generales
Comparacin de tipos de Valor y Referencia
Definicin de datos de Valor por el usuario:
enum (Enumeraciones)
struct (Estructuras)
Tipos de datos Enumerativos
Aspectos generales del CTS
El CTS admite tanto tipos de valor como de referencia
Tipo de referencia
Tipo
Tipo de valor
Comparacin de tipos de valor y de referencia
Tipos de valor:
Contienen sus datos
directamente
Cada una tiene su
propia copia de datos
Las operaciones
sobre una no afectan
a otra
Tipos de referencia:
Almacenan referencias a
sus datos (conocidos como
objetos)
Dos variables de referencia
pueden apuntar al mismo
objeto
Las operaciones sobre una
pueden afectar a otra
Consideraciones de tipos de valor y de referencia
Los tipos por valor son tipos de datos cuyo valor se almacena
en la pila (Stack). Se puede decir que el acceso al valor
contenido en uno de estos tipos es directo, es decir se
almacena directamente en la memoria reservada para ese tipo
y cualquier cambio que se haga se hace directamente sobre
dicho valor, de igual forma las copias de estos valores son
independientes.
Por otro lado, los tipos por referencia se almacenan en la
memoria "lejana (Heap), a diferencia de los tipos por valor,
los tipos por referencia lo nico que almacenan es una
referencia (o puntero) al valor asignado. Las copias de tipos
por referencia, son de direcciones, pero no de contenidos.

Comparacin de tipos de valor predefinidos y
definidos por el usuario
Ejemplos de tipos de
valor predefinidos:
int
float
Ejemplos de tipos de valor
definidos por el usuario:
enum
struct
Del usuario
Tipos de valor
Predefinido
Creacin de tipos de datos definidos por el
usuario
Enumeraciones
Estructuras (estudiadas en Prog I )
Enumeraciones
Utilidad: La utilidad de los enumerativos es ms
manifiesta cuando se quiere manejar una serie
de valores constantes con nombre.
Sintaxis: enum idVar { valor
1
, valor
2
, .. valor
n
}
Ejemplo: enum Color { Rojo, Amarillo, Verde }
De forma implcita una variable enum asigna un valor numrico
entero a cada elemento comenzando por 0, as en el ejemplo,
Rojo = 0, Amarillo = 1 y Verde = 2



Uso de variables enumerativas
Definicin de una enumeracin

Uso de una enumeracin

Visualizacin de una variable de enumeracin
enum Color { Rojo, Verde, Azul }
Color colorPaleta = Color.Rojo;
MessageBox.Show ( colorPaletta ); // Muestra Rojo
Ejemplo de variables enumerativas
enum Semana { domingo=1, lunes=2, martes=3, miercoles=4,
jueves=5, viernes=6, sabado=7}


Uso de una enumeracin

Note que en este ejemplo se han dado valores a las constantes
de forma explicita
Semana diaSem = Semana.sabado;
if (diaSem == Semana.sabado || diaSem == Semana.domingo)
MessageBox.Show("Dia de descanso ");
else
MessageBox.Show("Dia de trabajo ");
void MostrarDia ( int dia )
{ if (dia >= 1 && dia <= 7)
MessageBox.Show(( (Semana)dia).ToString( )); .. }
E
l
a
b
o
r
a
d
o

p
o
r

J
C
a
s
t
r
o


D
o
c
e
n
t
e

U
T
E
P
S
A

Ejercicio de Sobrecarga de Mtodos
CL: segn el diagrama UML que se muestra a continuacin






Nota: El mtodo Saludo( ) devolver
Hola si no se pasan argumentos; Hola + nombre si se pasa un
argumento; Buenos das + nombre si se pasan 2 argumentos
y tpo=manana, Buenos tardes + nombre si se pasan 2 argumentos
y tpo=tarde, etc.
CP: Evento que invoque al mtodo Saludo en sus 3 variantes


Saludos
+ tpo: enum = maana, tarde, noche
+ Saludo( ) : string
+ Saludo( nombre : string) : string
+ Saludo( nombre : string, tiempo : tpo) : string

También podría gustarte