1UMLDiagramas de Clases(UML ilustrado)Universidad de los AndesDemián GutierrezNoviembre 2012
2Diagramas de Clases(¿Qué Muestran?)La estructura estática del sistema modelado¿simple verdad?¿estructura estática?
3Diagramas de Clases(¿Qué Muestran?)Se concentran en los elementos del sistemade forma independiente del tiempo(muestran a...
4Diagramas de Clases(¿Qué Muestran?)Las clases,las interfaces / atributos de las clases,las relaciones que existen entre l...
5Diagramas de Clases(¿Para qué Sirven?)Realizar la abstracción de un dominio yformalizar los conceptos relacionados almism...
6Diagramas de Clases(Programación Orientada a Objetos)La mayoría de los conceptosque se presentan en lassiguientes transpa...
7Diagramas de Clases(Programación Orientada a Objetos)¿Qué es una Clase?
8Diagramas de Clases(Notación Básica)Clase / Clasificador: Definición de la estructura y elcomportamiento de un conjunto d...
9Diagramas de Clases(Atributos y Métodos)Atributos:Propiedades relevantes de un claseRepresentan su estructuraPueden ser s...
10Diagramas de Clases(Diagramas de Clases y Código)A nivel de implementación,la relación que existe entre elcódigo y una c...
11Diagramas de Clases(Diagramas de Clases y Código)public class ComplexNumber {private double r;private double i;public Co...
12Diagramas de Clases(Notación Avanzada)Visibilidad:- Privado~ Paquete# Protegido+ PúblicoNombreAtributoValor porDefectoTi...
13Diagramas de Clases(Notación Avanzada)Para los Atributos:[visibilidad] [/] nombre [:tipo] [multiplicidad] [=valor poromi...
14Diagramas de Clases¿Clases y Objetos?Clases y Objetos¿qué es un objeto?
15Diagramas de Clases¿Clases y Objetos?Clases y Objetos¿qué es una instancia?¿qué es instanciar?
16Diagramas de Clases¿Clases y Objetos?Instancia:Manifestación concreta de unaabstracción, que puede tener unestado y a la...
17Diagramas de Clases¿Clases y Objetos?public class Persona {private String nombre;private char sexo;private Date fechaNac...
18Diagramas de Clases¿Clases y Objetos?Persona p1 = new Persona(“Pedro”, M, new Date(16, 7, 1988), “Actor” );Persona p2 = ...
19Diagramas de Clases(Parametrizables / Abstractas)Clases Parametrizable:Clases que se puedenparametrizar con uno o más ti...
20Diagramas de Clases(Parametrizables / Abstractas)public class Lista<Tipo> {public void insertar (Tipo t){ /* código */ }...
21Diagramas de Clases(Parametrizables / Abstractas)public abstract class FiguraBase {public void insertarEnCanvas(Canvas c...
22Diagramas de Clases(Herencia / Especialización / Generalización)Generalización:Relación de tipo ES-UN(A), abstracciones ...
23Diagramas de Clases(Herencia / Especialización / Generalización)Clase PadreClase HijaRelación deHerencia(“es una”)¿Heren...
24Diagramas de Clases(Herencia / Especialización / Generalización)01) Persona p1 = new Persona();02) Persona p2 = new Estu...
25Diagramas de Clases(Herencia / Especialización / Generalización)public abstract class Figura {public abstract double cal...
26Diagramas de Clases(Herencia / Especialización / Generalización)Herencia:Disjunta / TraslapadaTotal / Parcialesto se usa...
27Relaciones (Vínculos)¿asociaciones / relaciones?¿1:1, 1:N y N:M?se puede vermejor con un ejemplo
28Relaciones (Vínculos)1:NDepartamentode ControlDepartamentode ComputaciónProfesores DepartamentosDepartamentode Investiga...
29Vínculo / RelaciónDicta / Es dictada porRelaciones (Vínculos)N:MProgramación10Bases de DatosProfesores MateriasProgramac...
30Relaciones (Vínculos)1:1Vínculo / RelaciónEs novia de / Es novio deChicas Chicos¿Con cuántos Chicos está asociada una Ch...
31Diagramas de Clases(Relaciones / Vínculos / Asociaciones)Asociaciones:Representan relaciones estructurales entre las cla...
32Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Departamento {// Una lista de profesores// (Un dep...
33Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Estudiante {// Una lista de asignaturas// (Un estu...
34Diagramas de Clases(Relaciones / Vínculos / Asociaciones)N:M¿hay otra forma de implementarlo?
35Diagramas de Clases(Relaciones / Vínculos / Asociaciones)Una relación muchos a muchos se puede vercomo dos relaciones un...
36Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Estudiante {// Una lista de EstAsigRelacion (Una c...
37Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Estudiante {// Una lista de Nota (Una clase asocia...
38Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Departamento {// Una referencia a una secretaria//...
39Diagramas de Clases(Asociaciones / Navegabilidad)Navegabilidad:Permite definir qué lado de la asociación esaccesible des...
40Diagramas de Clases(Agregación / Composición)“una asociación normal entre dos clases representa unarelación estructural ...
41Diagramas de Clases(Agregación / Composición)Agregación:Es una relación en la que una de las clases representa untodo y ...
42Diagramas de Clases(Agregación / Composición)“Precise semantics of shared aggregation varies byapplication area and mode...
43Diagramas de Clases(Agregación / Composición)Composición:Es una forma más fuerte de la agregación, en la quelas partes n...
44Diagramas de Clases(Agregación / Composición)compositeobjectcomposedobject“the composite object has responsibility for t...
45Diagramas de Clases(Agregación / Composición)Composición: ¡Las partes NOpueden ser compartidas porvarios todos!Agregació...
46Diagramas de Clases(Agregación / Composición)En realidad, si se piensa en términos deinstancias no hay ninguna contradic...
47Diagramas de Clases(Dependencia)Dependencia:Relación en la que una clase necesita (requiere) a otra para poderfuncionar ...
48Diagramas de Clases¿qué es una interfaz?¿cuál es la Interfaz deuna clase?
49Diagramas de Clases(Interfaces / Realizaciones)Interfaz (desde el punto de vista de POO):Todas los métodos y atributos p...
50Diagramas de Clases(Interfaces / Realizaciones)La interfaz IGeometrico esimplementada / realizada tantopor Círculo como ...
51Diagramas de Clases(Interfaces / Realizaciones)01) IGeometrico g1 = new IGeometrico();02) IDibujable d1 = new IDibujable...
52Diagramas de Clases(Interfaces / Realizaciones)<<interface>> es un estereotipoEditorGrafico es una claseque usa la inter...
53Diagramas de Clases(Interfaces / Realizaciones)import java.awt.Point;import java.awt.Rectangle;public class Circulo impl...
54Diagramas de Clases(Interfaces / Realizaciones)import java.awt.Rectangle;public interface IGeometrico {public double get...
55Diagramas de Clases(Interfaces / Realizaciones)List<IDibujable> elementosDibujar;// ...for (IDibujable dibujable :elemen...
56Gracias¡Gracias!
Upcoming SlideShare
Loading in...5
×

Clase 12a uml_clases

654

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
654
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
62
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Clase 12a uml_clases

  1. 1. 1UMLDiagramas de Clases(UML ilustrado)Universidad de los AndesDemián GutierrezNoviembre 2012
  2. 2. 2Diagramas de Clases(¿Qué Muestran?)La estructura estática del sistema modelado¿simple verdad?¿estructura estática?
  3. 3. 3Diagramas de Clases(¿Qué Muestran?)Se concentran en los elementos del sistemade forma independiente del tiempo(muestran aspectos estáticos y no dinámicos)¿estructura estática?
  4. 4. 4Diagramas de Clases(¿Qué Muestran?)Las clases,las interfaces / atributos de las clases,las relaciones que existen entre las distintasclases del sistemaComparar el software con la ingeniería civil esla peor analogía que puede existir...Pero si se hace tal comparación, losdiagramas de clases serían lo más cercano alos planos estructurales de un ingeniero civil
  5. 5. 5Diagramas de Clases(¿Para qué Sirven?)Realizar la abstracción de un dominio yformalizar los conceptos relacionados almismo (Conceptos / Modelo de Dominio)Definir / Documentar una solución dediseño: la estructura del sistema en términosde clases, objetos y relacionesDefinir / Documentar modelos de datos, enespecial modelos de datos orientados aobjetos (función similar los diagramas ERE)Menorniveldeabstracciónsiempre es necesario conocer el nivel de abstracciónde un diagrama para poder interpretarlo correctamenteimplementaciónconceptos
  6. 6. 6Diagramas de Clases(Programación Orientada a Objetos)La mayoría de los conceptosque se presentan en lassiguientes transparenciasestán relacionados con losconceptos de programaciónorientada a objetos (POO)
  7. 7. 7Diagramas de Clases(Programación Orientada a Objetos)¿Qué es una Clase?
  8. 8. 8Diagramas de Clases(Notación Básica)Clase / Clasificador: Definición de la estructura y elcomportamiento de un conjunto de objetos que tienen(comparten) el mismo patrón estructural y decomportamientoUn ejemplo de una clase “número complejo”:Base de Datos:¿No les suena esto al concepto de tipo de entidad?
  9. 9. 9Diagramas de Clases(Atributos y Métodos)Atributos:Propiedades relevantes de un claseRepresentan su estructuraPueden ser simples o compuestos(primitivos u otras clases)Métodos:Comportamiento asociado a unaclase,“Contrato” asociado a una claseuna clase tiene:¿contrato?luego hablamosde esto
  10. 10. 10Diagramas de Clases(Diagramas de Clases y Código)A nivel de implementación,la relación que existe entre elcódigo y una clase en UMLes muy importante¡Necesito que hablemos elmismo idioma!
  11. 11. 11Diagramas de Clases(Diagramas de Clases y Código)public class ComplexNumber {private double r;private double i;public ComplexNumber(double r, double i) {this.r = r;this.i = i;}public double norm() {return Math.sqrt(r * r + i * i);}}El código esJava ;-)
  12. 12. 12Diagramas de Clases(Notación Avanzada)Visibilidad:- Privado~ Paquete# Protegido+ PúblicoNombreAtributoValor porDefectoTipo de DatoMultiplicidadTipo deRetornoParámetrosde EntradaNombre delMétodoBase de Datos:Generalmente, cuando se desarrolla un modelo dedatos no se utiliza toda esta complejidad.Por ejemplo, generalmente no se definen métodos
  13. 13. 13Diagramas de Clases(Notación Avanzada)Para los Atributos:[visibilidad] [/] nombre [:tipo] [multiplicidad] [=valor poromisión] [{propiedad}]Para los Métodos:[visibilidad] nombre [(lista de parámetros)] [{propiedad}]Donde un parámetro es:[dirección (in/out/inout)] nombre: tipo [multiplicidad] [=valor poromisión]Las propiedades pueden una o mas de las siguientes:readOnly, isQuery, Concurrent, Guarded, Sequential, etcétera... o cualquier otra predefinida ...
  14. 14. 14Diagramas de Clases¿Clases y Objetos?Clases y Objetos¿qué es un objeto?
  15. 15. 15Diagramas de Clases¿Clases y Objetos?Clases y Objetos¿qué es una instancia?¿qué es instanciar?
  16. 16. 16Diagramas de Clases¿Clases y Objetos?Instancia:Manifestación concreta de unaabstracción, que puede tener unestado y a la que se le puede aplicarun conjunto de operacionesInstanciación / Instanciar:Proceso de generación o creación deinstancias (objetos) de una clasepedro = new Persona()Objeto:Manifestación concreta de una clase(abstracción)
  17. 17. 17Diagramas de Clases¿Clases y Objetos?public class Persona {private String nombre;private char sexo;private Date fechaNac;private String profesion;public Persona(String nombre, char sexo, Date fechaNac, String profesion) {this.nombre = nombre;this.sexo = sexo;this.fechaNac = fechaNac;this.profesion = profesion;}}existe una diferencia muyimportante entre unObjeto y una Clase
  18. 18. 18Diagramas de Clases¿Clases y Objetos?Persona p1 = new Persona(“Pedro”, M, new Date(16, 7, 1988), “Actor” );Persona p2 = new Persona(“Andrea”, F, new Date(14, 4, 1980), “Ceramista”);Persona p3 = new Persona(“María”, F, new Date(23, 11, 1960), “Médico” );Persona p4 = new Persona(“Luis”, M, new Date(12, 1, 1977), “Ingeniero”);CrearInstancias(Instanciar)
  19. 19. 19Diagramas de Clases(Parametrizables / Abstractas)Clases Parametrizable:Clases que se puedenparametrizar con uno o más tiposde datos según sea necesarioGenerics en Java,Templates en C++Clases Abstractas:Clases que no tieneninstrumentados / implementadostodos sus métodos
  20. 20. 20Diagramas de Clases(Parametrizables / Abstractas)public class Lista<Tipo> {public void insertar (Tipo t){ /* código */ }public void eliminar (Tipo t){ /* código */ }public Tipo eliminar (int pos){ /* código */ }public Tipo obtener (int pos){ /* código */ }public Iterador iterador (){ /* código */ }}// La clase se usa de la siguiente forma:Lista<int> listaDeEnteros = new Lista<int>();Lista<Persona> listaDePersonas = new Lista<Persona>();
  21. 21. 21Diagramas de Clases(Parametrizables / Abstractas)public abstract class FiguraBase {public void insertarEnCanvas(Canvas c) { /* código */ }public void eliminarDeCanvas(Canvas c) { /* código */ }// Los métodos siguientes son abstractos,// es decir, no tienen implementaciónpublic abstract double getArea();public abstract double getPerimetro();public abstract double getRectCont();public abstract double getDibujar();}
  22. 22. 22Diagramas de Clases(Herencia / Especialización / Generalización)Generalización:Relación de tipo ES-UN(A), abstracciones degeneralización / especialización de clasesHerencia:Propiedad que tienen lasclases de heredar de sussuper-clases estructuray/o comportamiento(Simple / Múltiple)
  23. 23. 23Diagramas de Clases(Herencia / Especialización / Generalización)Clase PadreClase HijaRelación deHerencia(“es una”)¿Herencia Simple o Múltiple?
  24. 24. 24Diagramas de Clases(Herencia / Especialización / Generalización)01) Persona p1 = new Persona();02) Persona p2 = new Estudiante();03) Persona p3 = new Empleado();04) Persona p4 = new Preparador();05) Empleado e1 = new Empleado();06) Empleado e2 = new Preparador();07) Estudiante s1 = new Estudiante();08) Estudiante s2 = new Preparador();09) Preparador r1 = new Preparador();10) Empleado e3 = new Persona();11) Estudiante s3 = new Persona();12) Preparador r2 = new Persona();13) Preparador r3 = new Empleado();14) Preparador r4 = new Estudiante();Herencia Simple:Estudiante->PersonaHerencia Múltiple:Preparador->Empleado->Estudiante¿Cuáles sonVálidos?
  25. 25. 25Diagramas de Clases(Herencia / Especialización / Generalización)public abstract class Figura {public abstract double calcArea ();public abstract void dibujar (Canvas canvas);}public class Rectanguloextends Figura {// ...}public class Cuadradoextends Rectangulo {// ...}public class Elipseextends Figura {// ...}public class Circuloextends Elipse {// ...}
  26. 26. 26Diagramas de Clases(Herencia / Especialización / Generalización)Herencia:Disjunta / TraslapadaTotal / Parcialesto se usa principalmente en el modelado de datosla mayoría de los lenguajes de programación no lo permiten
  27. 27. 27Relaciones (Vínculos)¿asociaciones / relaciones?¿1:1, 1:N y N:M?se puede vermejor con un ejemplo
  28. 28. 28Relaciones (Vínculos)1:NDepartamentode ControlDepartamentode ComputaciónProfesores DepartamentosDepartamentode Investigaciónde Operaciones¿Con cuántos profesores puede estar asociado un departamento?¿Y al contrario?Vínculo / RelaciónTrabaja En / Tiene
  29. 29. 29Vínculo / RelaciónDicta / Es dictada porRelaciones (Vínculos)N:MProgramación10Bases de DatosProfesores MateriasProgramación20¿Con cuántos profesores puede estar asociado una materia?¿Y al contrario?
  30. 30. 30Relaciones (Vínculos)1:1Vínculo / RelaciónEs novia de / Es novio deChicas Chicos¿Con cuántos Chicos está asociada una Chica en particular?¿Y al contrario?
  31. 31. 31Diagramas de Clases(Relaciones / Vínculos / Asociaciones)Asociaciones:Representan relaciones estructurales entre las clases(la forma en que están relacionadas entre si las clases)¿cómo se implementan?
  32. 32. 32Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Departamento {// Una lista de profesores// (Un departamento tiene muchos profesores)private List<Profesor> profesorList;}// ...public class Profesor {// Una referencia a un departamento// (Un profesor pertenece sólo a un departamento)private Departamento departamentoRef;}
  33. 33. 33Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Estudiante {// Una lista de asignaturas// (Un estudiante tiene muchas asignaturas)private List<Asignatura> asignaturaList;}// ...public class Asignatura {// Una lista de estudiantes// (Una asignatura tiene muchos estudiantes)private List<Estudiante> estudianteList;}
  34. 34. 34Diagramas de Clases(Relaciones / Vínculos / Asociaciones)N:M¿hay otra forma de implementarlo?
  35. 35. 35Diagramas de Clases(Relaciones / Vínculos / Asociaciones)Una relación muchos a muchos se puede vercomo dos relaciones uno a muchos
  36. 36. 36Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Estudiante {// Una lista de EstAsigRelacion (Una clase relación)private List<EstAsigRelacion> estAsigRelacionList;}public class EstAsigRelacion {// referencias cruzadas a las dos clases relacionadasprivate Estudiante estudianteRef;private Asignatura asignaturaRef;}public class Asignatura {// Una lista de EstAsigRelacion (Una clase relación)private List<EstAsigRelacion> estAsigRelacionList;}
  37. 37. 37Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Estudiante {// Una lista de Nota (Una clase asociación)private List<Nota> notaList;}public class Nota {// Datos de la asociaciónprivate double nota;private int asistencias// referencias cruzadas a// las dos clases relacionadasprivate Estudiante estudianteRef;private Seccion seccionRef;}public class Seccion {// Una lista de Nota (Una clase asociación)private List<Nota> notaList;}
  38. 38. 38Diagramas de Clases(Relaciones / Vínculos / Asociaciones)public class Departamento {// Una referencia a una secretaria// (Un departamento tiene sólo una secretaria)private Secretaria secretariaRef;}// ...public class Secretaria {// Una referencia a un departamento// (Una secretaria pertenece sólo a un departamento)private Departamento departamentoRef;}
  39. 39. 39Diagramas de Clases(Asociaciones / Navegabilidad)Navegabilidad:Permite definir qué lado de la asociación esaccesible desde el otro ladoIndefinidoNavegableNOnavegableNavegable porambos lados
  40. 40. 40Diagramas de Clases(Agregación / Composición)“una asociación normal entre dos clases representa unarelación estructural entre iguales, es decir, ambas clasesestán conceptualmente en el mismo nivel”**Booch, Rumbaugh, Jacobson, El Lenguaje Unificado de Modelado, Pearson Addison-Wesley 1ra. Edición“en algunos casos, se desea modelar una relación de tipotodo/parte, en la cual una de las clases representa un todoy la otra una parte del todo”*
  41. 41. 41Diagramas de Clases(Agregación / Composición)Agregación:Es una relación en la que una de las clases representa untodo y la otra representa parte de ese todoUna agregación representa una relación de tipo “tiene un”
  42. 42. 42Diagramas de Clases(Agregación / Composición)“Precise semantics of shared aggregation varies byapplication area and modeler”**Tomado de la versión 2.2 del estándar de UMLCuidado:En muchos casos las agregaciones (y lascomposiciones como veremos más adelante), puedenser fuente de mucha confusión
  43. 43. 43Diagramas de Clases(Agregación / Composición)Composición:Es una forma más fuerte de la agregación, en la quelas partes no pueden existir sin el todoEl todo es responsable del ciclo de vida de las partesobjeto“compuesto”objeto“componente”
  44. 44. 44Diagramas de Clases(Agregación / Composición)compositeobjectcomposedobject“the composite object has responsibility for the existenceand storage of the composed objects (parts)”En este caso el estándar es más claro*Tomado de la versión 2.2 del estándar de UML
  45. 45. 45Diagramas de Clases(Agregación / Composición)Composición: ¡Las partes NOpueden ser compartidas porvarios todos!Agregación: ¡Las partespueden ser compartidas porvarios todos!peor aún¿No hay una aparente contradicción entreRectángulo, Circulo y la composición con Punto?
  46. 46. 46Diagramas de Clases(Agregación / Composición)En realidad, si se piensa en términos deinstancias no hay ninguna contradicción
  47. 47. 47Diagramas de Clases(Dependencia)Dependencia:Relación en la que una clase necesita (requiere) a otra para poderfuncionar (esto no implica necesariamente una asociación)La clase personadepende de laclase teléfonoSi se borra unalas clases de ladependencia,¿en qué caso seproduce un errorde compilación?
  48. 48. 48Diagramas de Clases¿qué es una interfaz?¿cuál es la Interfaz deuna clase?
  49. 49. 49Diagramas de Clases(Interfaces / Realizaciones)Interfaz (desde el punto de vista de POO):Todas los métodos y atributos públicos que exporta una claseEl “contrato” por medio del cual se accede/utiliza una claseInterfaz (desde el punto de vista de UML):Clase/Tipo asociado que describe (no implementa) uncomportamiento público/visible
  50. 50. 50Diagramas de Clases(Interfaces / Realizaciones)La interfaz IGeometrico esimplementada / realizada tantopor Círculo como porRectánguloDesde el punto de vista dePOO, tanto Círculo comoRectángulo son objetos de tipoIGeometrico“Contrato”“Contrato”
  51. 51. 51Diagramas de Clases(Interfaces / Realizaciones)01) IGeometrico g1 = new IGeometrico();02) IDibujable d1 = new IDibujable();03) IGeometrico g2 = new Rectangulo();04) IGeometrico g3 = new Circulo();05) IDibujable d2 = new Rectangulo();06) IDibujable d3 = new Circulo();06) g2.getArea();07) g2.dibujar();08) g2.getP1();¿Cuáles sonVálidos?
  52. 52. 52Diagramas de Clases(Interfaces / Realizaciones)<<interface>> es un estereotipoEditorGrafico es una claseque usa la interfazIdibujable,independientemente que laimplemente un Círculo ocualquier otra clase(Polimorfismo)¡El acto de magia de las interfaces y el polimorfismo!
  53. 53. 53Diagramas de Clases(Interfaces / Realizaciones)import java.awt.Point;import java.awt.Rectangle;public class Circulo implements IGeometrico, IDibujable {private double centro;private double radio;public double getArea() { /* de IGeometrico */ }public double getPerimetro() { /* de IGeometrico */ }public Rectangle getRectCont() { /* de IGeometrico */ }public void dibujar() { /* de IDibujable */ }public Point getCentro() { /* de circulo */ }public void setCentro(...) { /* de circulo */ }public double getRadio() { /* de circulo */ }public void setRadio(...) { /* de circulo */ }}
  54. 54. 54Diagramas de Clases(Interfaces / Realizaciones)import java.awt.Rectangle;public interface IGeometrico {public double getArea();public double getPerimetro();public Rectangle getRectCont();}public interface IDibujable {public void dibujar();}
  55. 55. 55Diagramas de Clases(Interfaces / Realizaciones)List<IDibujable> elementosDibujar;// ...for (IDibujable dibujable :elementosDibujar) {// No importa si dibujable es// un círculo, rectángulo, etcétera// Los puedo manejar a todos igual// porque tienen una interfaz en comúndibujable.dibujar();}¡El acto de magia de las interfaces y el polimorfismo!Algunos de estosson círculos, otrosson rectángulos,estrellas, líneas,etcétera...Pero todosimplementan lainterfaz IDibujable
  56. 56. 56Gracias¡Gracias!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×