-
Ricardo Casanova [email protected]
Blog: www.ricardocasanova.netTwitter: @rcasanovan
Skype: rcasanovan
IIIAlgoritmosy Programacin
Lminas elaboradas para la materia Algoritmos y Programacin III
de la Escuela de Ingeniera Informtica de la Universidad Catlica
Andrs Bello
-
NO es programacin
No es una metodologa
Es un lenguaje de modelado
Unified Modeling Lenguage
Qu NO es UML
Qu es UML
Lenguaje Unificado de Modelado
-
Clases
Objetos
Interaccin
Procesos
Roles
-
PHP
JavaPython
C#VB .Net
C++Objective C
Este modelado se hace a travs de un conjunto de diagramas que
proporciona UML
UML es indepentiente del lenguaje de programacin (usualmente un
lenguaje orientado a objetos)
-
PHP
JavaPython
C#VB .Net
C++Objective C
Un buen diseo implica tener una app robusta y la reduccin del
tiempo de desarrollo
-
Diagrama de clases. Conceptos
Una clase es una descripcin de un conjunto de objetos que
comparten los mi smo at r ibutos , op erac iones , relaciones y
semntica
Cada clase debe tener un nombre que la distinga de otras clases.
Un nombre es una cade de texto simple
Cliente'Pared'
Persona'
Negocio'
Sensor'Cliente'
Pared'
Persona'
Negocio'
Sensor'
Los nombres de las clases se definen SIEMPRE en singular (ya que
se habla de la plantilla)
La primera letra de la clase de define en maysculas (no es
obligatorio, pero es un estndar)
-
Diagrama de clases. Conceptos
Una clase est compuesta por tres elementos: Un nombre (nico para
cada clase), un conjunto de atributos y un conjunto de mtodos
NombreDeLaClase
atributos
mtodos
public (+): Indica que el atributo ser visible tanto dentro como
fuera de la clase, es decir, ser accesible desde todos lados
private (-): Indica que el atributo slo ser accesible desde la
propia clase (slo los mtodos de la clase podrn tener acceso directo
a l)
protected (#): Indica que el atributo no ser accesible desde
fuera de la clase, pero si podr ser accedido por la propia clase y
por las subclases que se generen (este concepto ms adelante)
-
Diagrama de clases. Conceptos
Una clase est compuesta por tres elementos: Un nombre (nico para
cada clase), un conjunto de atributos y un conjunto de mtodos
NombreDeLaClase
atributos
mtodos
public (+): Indica que el mtodo ser visible tanto dentro como
fuera de la clase, es decir, ser accesible desde todos lados
private (-): Indica que el mtodo slo ser accesible desde la
propia clase (slo los otros mtodos de la clase podrn tener acceso
directo a l)
protected (#): Indica que el mtodo no ser accesible desde fuera
de la clase, pero si podr ser accedido por la propia clase y por
las subclases que se generen (este concepto ms adelante)
-
Ejemplo en Java
public class Profesor{ public String nombre; private String
apellido; private String CI;}
Se utilizan las palabras reservadas public class para indicar
que se definir una clase en este caso llamada Profesor
Se definen 3 atributos de tipo String, dos de ellos de tipo
private y uno de tipo public
La regla para definir los atributos es exactamente igual a la de
C para definir variables:TipoDeDato nombreDelAtributo;
-
Ejemplo en Java
public class Materia{ private Profesor profesor; public void
metodo() { ... profesor.nombre = "Ricardo"; profesor.apellido =
"Prez"; } }
public class Profesor{ public String nombre; private String
apellido; private String CI;}
Se define otra clase llamada Materia y dentro de ella un
atributo de tipo profesor (quin dicta la materia)
Dentro de un mtodo se trata de tener acceso al campo nombre del
profesor. Correcto, el atributo es pblico en Profesor, por tanto es
visible desde otra clase
Dentro de un mtodo se trata de tener acceso al campo apellido
del profesor. Error, el atributo es privado en Profesor, slo es
visible en Profesor
Entonces Cmo tener acceso a un atributo privado?
-
Ejemplo en Java
public class Materia{ private Profesor profesor; public void
metodo() { ... profesor.nombre = "Ricardo"; profesor.apellido =
"Prez"; } }
public class Profesor{ public String nombre; private String
apellido; private String CI;
public String getApellido() { return apellido; }
public void setApellido(String apellido) { this.apellido =
apellido; }}
Se implementa un mtodo get en Profesor. Dicho mtodo es pblico
(puede ser invocado desde otra clase). El mtodo devuelve el valor
del atributo apellido
Se implementa un mtodo set en Profesor. Dicho mtodo es pblico
(puede ser invocado desde otra clase). El mtodo inicializa el valor
del atributo apellido con el parmetro (obviamente deben ser del
mismo tipo)
El this se utiliza en este caso para diferenciar el atributo del
parmetro (se llaman igual). Si no se usa this Java se confunde. El
this SIEMPRE va asociado al atributo, NUNCA al parmetro
-
Ejemplo en Java
public class Materia{ private Profesor profesor; public void
metodo() { ... profesor.nombre = "Ricardo";
profesor.setApellido("Prez"); } }
public class Profesor{ public String nombre; private String
apellido; private String CI;
public String getApellido() { return apellido; }
public void setApellido(String apellido) { this.apellido =
apellido; }}
Ahora desde Materia y a travs del objeto de tipo Profesor,
podemos invocar el mtodo setApellido que recibe como parmetro el
String. Ahora nuestro profesor se apellida Prez
RCNK 2013Ing. Ricardo Casanova
-
Todos los atributos de una clase son siempre, siempre, siempre,
SIEMPRE privados (salvo algunos casos)
Por qu?
Se garantiza la seguridad del atributo
Slo su clase se encarga de modificar su valor
En resumen
En el caso de los atributos, olviden lo explicado
anteriormente
Por cada atributo privado hay dos mtodos pblicos
el getterel setter
Un mtodo privado SLO podr ser llamado desde la propia clase
(para las dems clases, no existe)
En el caso de Java la sintaxis es muy similar a C al momento de
definir variables y mtodos
Los atributos y mtodos pueden ser accedidos slo a travs de un
objeto (por ahora), tal como si se tratara de un record o un struct
en C
-
Relaciones. Herencia
ItemDeLibreria
titulocodigo
...
Libro
autoreditorial
...
Video
productorestudio
...
Nota: En UML, la punta de la flecha va sin relleno. Dado que
Keynote no permite flechas sin relleno se ha utilizado esta
nomenclatura en la lmina
La relacin puede leerse fcilmente de forma jerrquica, de abajo
hacia arriba. un Video es un ItemDeLibreria o un Libro es un
ItemDeLibreria. La relacin no puede leerse al revs: un
ItemDeLibreria es un Video ya que en este caso tenemos libros
tambin
-
Relaciones. Herencia
ItemDeLibreria
titulocodigo
...
Libro
autoreditorial
...
Video
productorestudio
...
ItemDeLibreria se conoce como la clase padre o la super
clase
Libro y Video se conocen como las clases hijas o sub clases
Desde el punto de vista de las sub clases, se hereda de la super
clase todo aquello que sea pblico (o protegido). No se heredan
atributos ni mtodos privados
-
Relaciones. Herencia
ItemDeLibreria
titulocodigo
...
Libro
autoreditorial
...
Video
productorestudio
...
La relacin de herencia puede darse en N cantidad de niveles. De
esta manera D heredar todos los atributos y mtodos pblicos de C, B
y A
A
B
C
D
-
Relaciones. Herencia
ItemDeLibreria
titulocodigo
...
Libro
autoreditorial
...
Video
productorestudio
...
Esto puede ocurrir. Se conoce como herencia mltiple. Una clase
puede heredar de mltiples clases
A B
C
Java en particular NO permite la herencia mltiple. Slo trabaja
con herencia simple (para evitar el problema de herencia en
diamante) - ms adelante lo veremos
-
Relaciones. Agregacin
Carro
Chasis chasisMotor motor
...
Chasis
Carro carro
...
Motor
Carro carro
...
Nota: En UML, el rombo va sin relleno. Dado que Keynote no
permite flechas sin relleno se ha utilizado esta nomenclatura en la
lmina. Si el rombo va con relleno implica otra cosa adicional (lo
veremos ms adelante)
La relacin de agregacin es bidireccional. En el ejemplo se
utiliza ya que un Carro posee un Chasis y el Chasis est asociado a
ese y slo ese Carro. Lo mismo ocurre con Carro-Motor
Si es necesario definir atributos a uno y otro lado de la
relacin, la relacin de agregacin es la que debe ser empleada
La direccin del rombo vendr indicada por cul es la clase ms
general (la que envuelve al resto). En este ejemplo, sera Carro
-
Relaciones. Asociacin
Cliente
...
OrdenDeCompra
...
La relacin de asociacin permite relacionar clases que colaboran
entre s.
Un cliente tiene rdenes de compra
Una orden de compra est asociada a un cliente
-
Cardinalidad
1 (uno y slo uno)
0..1 (cero o uno)
N..M (desde N hasta M)
* (cero o varios)
0..* (cero o varios)
1..* (uno o varios)
Cliente
...
OrdenDeCompra
...
1..*
1
Un cliente posee una o ms rdenes de compra
Una orden de compra est asociada a un cliente
-
Relaciones. Uso (Utilizacin)
Computadora
String direccionIP
...
Cliente
String nombreComputadora equipo
...
La relacin de uso es unidireccional. En el ejemplo se utiliza ya
que un Cliente posee una computadora (la que usa) pero desde el
punto de vista de la Computadora no nos interesa saber quin la
usa
Se dice que Cliente est usando la clase Computadora para definir
el atributo
Aplica lo mismo para los parmetros de un mtodo
-
Primer ejemplo
Los alumnos y los profesores son personas. Por cada persona se
conoce su nombre, apellido, cdula de identidad, direccin y nmero de
telfono. De un alumno se conoce adicionalmente su nmero de
expediente y la carrera que est cursando. En el caso de los
profesores, se conoce su cargo en la universidad y facultad a la
que est adscrito.
Un alumno asiste a cursos. Los cursos estn impartidos por un
nico profesor. El alumno no puede repetir el mismo curso, pero
puede asistir a ms de uno. El profesor puede impartir diferentes
cursos y repetir un mismo curso en varias ocasiones. Para que un
curso se imparta debe haber un mnimo de 10 alumnos y un mximo de
50. De cada curso se conoce el nombre, carrera a la que pertenece y
nmero de UC.
Como registro del curso se guarda la fecha de comienzo, la fecha
de finalizacin y la nota del alumno.
Trata de modelar el siguiente problema usando un diagrama de
clases de UML: