Post on 02-Apr-2015
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
• UML: Lenguaje de Modelamiento Unificado
• Toma de Requerimientos
• Fase de Analisis
• Fase de Diseño
•Programación Orientada a Objetos
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
• Toma de Requerimientos
• Casos de Uso
• Actores
• Pre-Condiciones
• Descripción
• Post-Condiciones
• Excepciones
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
Caso de Uso: Matricula de clientes no registrados.
Actores: Clientes
Pre-Condiciones: Existencia de Cursos en BD
Descripción: El cliente ingresa a la vista de cursos, el sistema despliega la lista de cursos disponibles, el cliente selecciona el curso para matricularse, el sistema despliega la vista de registro (Excep. Sin cupo), con los campos nombre, rut e institución, el cliente llena los campos y presiona Aceptar, el sistema confirma la matricula.
Post-Condiciones: Se registra un nuevo cliente y se agrega un nuevo alumno al curso seleccionado.
Excepciones: Sin cupo. El curso no tiene cupos disponibles.
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
Fase de Análisis
• Diagrama de Clases
Clase: “Estructura que modela las propiedades y funcionalidades que definen un conjunto determinado de objetos”.
Objeto: “Modelo de una entidad, ya sea real o abstracta, de identificación única”.
Curso
Alumno
Profesor
Prof_Contra Prof_Horas
dicta 1*
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
Fase de Análisis
• Diagrama de Secuencia
Cliente Curso Alumno
verLista()
ListaCursossetMatricula(cod)
OKsetDatos(nom, rut, inst)
OK
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
Fase de Diseño
• Diagrama de Clases
Curso
getLista()setMatricula(cod)
AlumnoNombreRutInstitucionsetDatos(nom,rut,in)
Vst_CursosLstCursosAbrir()lstCursosSel(cod)
Vst_RegistroTxtNombreTxtRutTxtInstitucionBtnAceptarBtnAceptarClick()
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
Fase de Diseño
• Diagrama de Secuencia
Vst_Cursos Curso Alumno
getLista()
setMatricula(cod)
OK
setDatos(nom, rut, inst)
OK
Cliente Vst_Registroabrir()
Lista_Cursos Lista_Cursos
lstCursosSel(cod)
abrir()Datos
OK
btnAceptarClick()
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Análisis y Diseño Orientado a Objetos
Programación Orientada a Objetos
• Encapsulamiento: “Posibilidad de agrupar propiedades y funcionalidad de una clase en una sola estructura, controlando el acceso y la manipulación de dichas estructuras”
• Herencia: “Posibilidad de recibir en una clase toda o parte de las propiedades y funcionalidades de otra clase”
• Polimorfismo: “Posibilidad de darle mas de una forma a una funcionalidad especifica dentro de una clase o entre clases distintas”
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Encapsulamiento
• Atributos (Variables Miembro)
• De clase (estáticos)
• De instancia
• Métodos (Funciones Miembro)
• Estáticos
• De instancia
class Rectangulo{ int Dim1; int Dim2;
int area() { return Dim1*Dim2; }
int perimetro() { return 2*(Dim1+Dim2); }}
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Encapsulamiento
• Control de Acceso
• Privado
• Publico
• Protegido
class Rectangulo{ private int Dim1; private int Dim2;
public int area() { return Dim1*Dim2; }}
publicopublico privadoprivadoprotegidoprotegido
claseclase
clases hijasclases hijas
aplicaciónaplicación
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Encapsulamiento
• Control de Acceso
• Control programado
• Convenciones
class Rectangulo{ public int Dim1; public int Dim2;
public int area() { return Dim1*Dim2; }}
class Rectangulo{ private int Dim1; private int Dim2;
public void setDim1(int d1) { Dim1 = d1; } public int getDim1() { return Dim1; }
: public int area() { return Dim1*Dim2; }}
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Encapsulamiento
•Constructores y Destructores
• Constructor por defecto
• Constructor programado
• Destructor
• Referencias a si mismo (this)
class Rectangulo{ private int Dim1; private int Dim2;
public Rectangulo() { this.Dim1 = 10; this.Dim2 = 10; }
: public int area() { return Dim1*Dim2; }}
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Encapsulamiento
• Instanciando clases
Rectangulo rec1 = new Rectangulo();Rectangulo rec2 = new Rectangulo();
:rec2.setDim1(30);
Rectangulo
int Dim1int Dim2
Rectangulo()void setDim1(int d1)int getDim1()void setDim2(int d2)int getDim2()int area()
rec1
Dim1 = 10Dim2 = 10
rec2
Dim1 = 30Dim2 = 10
Instancia 1
Instancia 2
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Herencia
• Clases Base y Derivadas
• Herencia Simple y Múltiple
Profesor
Prof_Contra Prof_Horas
Persona Profesional
Clase Basey Derivada
Clase Base
Clase Derivada
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Herencia
• El control de acceso Protegido
• Referencias al constructor de la clase base (super)
class Rectangulo{ public Rectangulo(int d1, int d2) { super(d1, d2); }
: public int area() { return Dim1*Dim2; }}
class Figura{ protected int Dim1; protected int Dim2;
public Figura(int d1, int d2) { this.Dim1 = d1; this.Dim2 = d2; }
:}
Clase Base
Clase Derivada
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Herencia
• Instanciando clases derivadas
• Clases finales
Rectangulo rec1 = new Rectangulo(5,10);
Elipse eli1 = new Elipse(8,12);
Figura fig1;
if (tipo = = “Rect”){ fig1 = new Rectangulo(5,10);}else if (tipo = = “Elip”){ fig1 = new Elipse(8,12);}
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Herencia
• Clases abstractas Figura
Dim1Dim2
area()perimetro()
Rectangulo
area()perimetro()
Elipse
area()perimetro()
abstract class Figura{ protected int Dim1; protected int Dim2;
:
public abstract int area(); public abstract int perimetro(); }
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Herencia
• Interfaces
interface Figura{ public int area(); public int perimetro();}
interface Dibujable{ public void dibuja(Graphics g);}
interface Persistente{ public void grabar(); public void cargar(String pk);}
class Rectangulo{ : public int area() { return Dim1*Dim2; } public int perimetro() { return 2*(Dim1+Dim2); } public void dibuja(Graphics g) { : } public void grabar() { : } public void cargar(String pk) { : }}
Implementa
Implementa
Implementa
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Polimorfismo
• Sobrecarga de operaciones
Sobrecarga del Operador +
int + int = intfloat + float = floatfloat + int = float
String + String = StringString + int = StringRectangulo + Rectangulo = RectanguloString + Rectangulo = String
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Polimorfismo
• Sobrecarga del constructor
class Rectangulo{ private int Dim1; private int Dim2;
public Rectangulo(int d1, int d2) { Dim1 = d1; Dim2 = d2; } public Rectangulo(int dim) { Dim1 = Dim2 = dim; } public Rectangulo(String dime) { int dim = Integer.parseInt(dime); Dim1 = Dim2 = dim; }
:}
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Polimorfismo
• Sobrecarga de funciones
class Formulas{ public static double potencia(double bas) { : } public static double potencia(double bas, int exp) { : } public static double potencia(double base, double exp) { : }}
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Polimorfismo
• Polimorfismo por medio de clases abstractas e interfaces
class Rectangulo{ : public int area() { return Dim1*Dim2; }}
class Elipse{ : public int area() { return (int)(3.1416*Dim1*Dim2); }}
interface Figura{
: public int area();}
Implementan
Lenguaje de Programación Java Profesor: Mauricio Martínez P.
Programación Orientada a Objetos
Polimorfismo
• Polimorfismo por medio de clases abstractas e interfaces
Figura fig1;
if (tipo = = “Rect”){ fig1 = new Rectangulo(5,10);}else if (tipo = = “Elip”){ fig1 = new Elipse(8,12);}
int areaFig = fig1.area();: