Java, Paradigmas, UML, Patrones - SergioRiosC/Datos-1 GitHub Wiki
Breve introduccion a Java
- Java es un lenguaje de la programación orientado a objetos
- Se rige por la filosofía de “Write once, run everywere”, lo que quiere decir que es un lenguaje portable
- Al compilar el código, no se genera un código intermedio conocido como Byte Code
- La única máquina capaz de ejecutar byte code es la “Java Virtual Machine” (JVM)
- La JVM es especificada por Oracle, pero distribuida por varias empresas, o sea, existen varias “marcas” de la JVM (Oracle, IBM…)
- En una computadora pueden correr varias instancias de la JVM
- Por cada proceso de Java, se ejecuta una JVM aparte
Java+JVM+Utilidades para programar, conforman una plataforma de software para el desarrollo de aplicaciones de usuario final.
Existen varias plataformas de Java:
• SE: (Standard Edition) Para aplicaciones de escritorio
• ME: (Mobile Edition) Para móviles
• EE: (Enterprise Edition) Aplicación de servidor
Java se distribuye de varias formas:
- JRG: Mínimo para ejecutarse
- JDK: Java Development Kit JRG+SE
- Servidor de aplicaciones: Implementación de EE
Paradigmas de la Programacion
- En general, es una forma de ver/entender/moldear el mundo
- En el ámbito del software, es un estilo fundamental de programación, determina como el programa “ve” el mundo
- Determina como debe ser usado el lenguaje por el programador
- Algunos lenguajes son multiparadigmas
Existen 4 paradigmas principales:
- Lógico:
• El mundo se modela mediante predicciones lógicas
• Se aplican principios de matemática discreta
• Poco usado en aplicaciones comerciales
• Prolog es el principal lenguaje - Paradigma Funcional
• El mundo se modela por funciones matemáticas
• Lenguaje 100% funcionales: Lisp Scheme
• Permite declarar funciones, pasar funciones por parámetro, retornar funciones, etc.
• Muchos lenguajes modernos han incorporado este paradigma por conveniencia - Paradigma Imperativo
• El mundo se modela por instrucciones
• Ampliamente usado en aplicaciones comerciales
• Tienden a ser muy eficientes, generalmente compilan en lenguaje máquina
• Gramáticamente simples
• Se consideran como niveles de abstracción bajo
• Ejemplo: C, C++ - Paradigma Orientado a Objetos
• El mundo se modela por objetos del mundo real y su interacción
• Muy naturales para el ser humano
• Facilitan la reutilización de código
• Mayoritariamente no generan lenguaje maquina
• Poseen muchas estructuras sintácticas
• Ejemplo: Java, C++, Python, JavaScript
UML y Patrones de Diseño
SDLC: Software Development Life Cycle (Ciclo de Desarrollo de Software) es un proceso de creación de software que se ordena en pasos para tener éxito en la creación de sistemas, los pasos son:
- Recopilación de requerimientos: Se pregunta a los clientes sus deseos para su futura plataforma
- Análisis de requerimientos: Se observan los deseos del cliente
- Diseño de Software: Se crea un prototipo con el código necesario en papel
- Implementación: Se programa el código diseñado
- Pruebas: Se le realizan pruebas especializadas al prototipo de código
- Instalación y mantenimiento: Una vez pasadas las pruebas realizadas, se puede instalar el programa y darle mantenimiento periódicamente
El objetivo del UML es poder realizar un software de calidad y esto se logra si este sirve, es mantenible, reusable y ajustable al tiempo y presupuesto Existen varios métodos de realizar el SDLC:
Modelo de Cascada:
o Se piensa un paso a la vez
o Cada cierto tiempo se entrega un documento con el avance del proyecto
o Fracasó porque tomaba mucho tiempo y dinero
Modelo de Espiral:
o El proyecto está compuesto por mini proyectos
o Se puede ir modificando el proyecto conforme se avanza en el
o Cada cierto tiempo se entrega una propuesta de software con el avance de este
Diseño orientado a objetos:
- Modelo para guiar al programador durante el proceso de diseño de software bajo el paradigma OO
- Provee un conjunto de principios para caliificar que tan bien está el diseño del software
► Primera Fase: Modelo Conceptual
○ Entender el dominio del problema y crear un modelo conceptual. Este modelo se puede hacer a criterio del diseñador
○ Debe ser fácil de entender
○ Posee una story board
► Segunda Fase: Análisis
○ Construir historias de usuario o requerimientos
○ Se pueden crear prototipos para entregar mejor el problema
○ Las user stories siguen un formato
"Yo como (puesto) quiero ser capáz de (acción) con el fin de (objetivo)"
► Tercera fase: Arquitectura
○ Definir la estructura de la solución para cumplir los requerimientos funcionales y de calidad
○ Documentar las decisiones
► Cuarta Fase:Diseño Detallado
○ Construir de forma iterativa un sistema detallado del sistema por construir
paso1: Identifique las clases
Busque los sustantivos en los user stories
Algunos sustantivos se convertirán en clases, otras se eliminarán y otras se añadirán
Las clases deben obtener una sola responsabilidad
paso2: Identifique las asociaciones
Identificar como interactuan las clases entre si
Una asociación tiende a convertrse en un atributo
paso3: Identifique atributos y métodos
Patrones de diseño
- Un patron es una regularidad
- En el software hay regularidades o recurrentes
- Reutilizar buenas soluciones es una buena práctica conocida por los ingenieros de software
- Basar nuevas soluciones en experiencias previas
Hay tres categorias de patrones de diseño:
Creacionales: determinan como crear objetos
Estructurales: como usar objetos entre si mediante composición
De Comportamiento: como comunicar objetos sin componerlos directamente
Creacionales: Factory, Builder, Singleton, Prototype
Estructuraes: Adapter, Abtract Factory, Bridge, Composite, Decorator, Facade, Proxy.
De Cumplimiento: Interprete, Cadena de restponsabilidad, Comando, Iterador, Memento, Observer.
Patron Fact:
Crea una clase factory que crea objetos concretos mediante selecctor. El caller no conoce las clases concretas
interface Dog{-------------como una clase abstracta
void bark(){}
}
class Rottweiller implements Dog{
void bark(){}
-cuerpo-
}
class Poodle implements Dog{
void bark (){}
-cuerpo-
}
class Dog_Factory{
public static Dog getDog(DogType d){
if(d==DogType.BIG){
return new Rottweiler
}else{
return new poodlel;
}else{
throw new except on ("Unknow")}
ennum DogType{
SMALL;
BIG;}
Facade: crea una clase que funciona como fachada para un subsistema complejo. El caller interactua con el Facade y no con el Subsistema directamente.
Patron Singleton permite restringir la instauracion de una clase. Unicamente se puede instanciar solo una clase
`public class Singelton{ // se puede llamar como sea
private static Singelton instance= null;
private Singleton(){
------------
}
public void doSomething(){
-------------
}
public static Singleton getInstance(){
if(istance==null){
instance=new Singleton();
}
return instance;
}
Main:
Singleton.getInstance().doSomething();
Singleton var=Singleton.getInstance();} `
Patron: Builder
Delegar la construccion de una clase compleja a una clase complentaria
public class Phone{ //atributos camara, radio, touchID, Waterproof .... public Phone(p(camara),p(radio),p(touchID),p(waterproof){ // Muchos parametros} Phone p1=new Phone(null,null,touchID,null); // muy dificil con muchos parametros} Se hace: private Phone(Builder builder){ this.camara=camara;.... } public static class Builder{ camara; radio; touchID; public Builder with(camara){ this.camara=camara; return this } public Pone build(){ ----- return new Phone(this);} se instancia: Phone p2= new Phone.Builder() .whithCamara(---)}