Material

Patrones de Diseño

Un patrón de diseño es una solución general y reutilizable para un problema común en el diseño de software. No es un código específico que puedas copiar y pegar, sino una plantilla o guía que describe cómo resolver un problema de diseño de software de manera eficiente y mantenible. Los patrones de diseño son el resultado de la experiencia colectiva de desarrolladores que han enfrentado y resuelto problemas similares a lo largo del tiempo.

Características de los patrones de diseño:

  • - Reutilizable: Pueden aplicarse en diferentes contextos y proyectos
  • - Probado: Han sido validados y refinados a través de su uso en múltiples situaciones.
  • - Abstracción: No son soluciones concretas, sino descripciones de cómo resolver un problema.
  • - Lenguaje común: Proporcionan un vocabulario compartido entre desarrolladores para discutir soluciones de diseño.

Los patrones de diseño se clasifican en tres categorías principales:

  • - Creacionales: Se centran en cómo se crean los objetos. Ayudan a hacer que el sistema sea independiente de cómo se crean, componen y representan los objetos.
  • - Estructurales: Se centran en cómo se componen las clases y objetos para formar estructuras más grandes.
  • - De comportamiento: Se centran en la interacción y distribución de responsabilidades entre objetos.
.

De Comportamiento

Strategy (cambiar el comportamiento en tiempo de ejecucion)

Pág.355 del PDF

Define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Permite que un algoritmo varie independientemente de los clientes que lo usan.

Template Mehtod (la plantilla o los pasos de un algoritmo)

Pág.365 del PDF

Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura

Command (cuándo y cómo se satisface una petición)

Pág.269 del PDF

Encapsula una petición en un objeto, permitiendo así parametrizar a los clientes con diferentes peticiones, hacer cola o llevar un registro de las peticiones, y poder deshacer las operaciones.

Observer (objetos que dependen de otro; cómo se mantiene actualizado el objeto dependiente)

Pág.333 del PDF

Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y se actualicen automáticamente todos los objetos que dependen de él.

Estructurales

Composite

Pág.195 del PDF

Compone objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.

Decorator

Pág.207 del PDF

Suma nuevas funcionalidades a un objeto sin tener que modificar su código. Envuelve al objeto original con otros objetos que le agregan comportamientos extra, de forma flexible y dinámica.

UML (Unified Modeling Language)

UML es un lenguaje o herramienta de comunicación para las personas que permite representar un modelo (una idea) del sistema real. Recordemos que un modelo es una abstracción que lo expresamos a través de los distintos diagramas: el modelo no es el sistema, sino lo que me interesa representar del sistema

Manejo de Excepciones

El concepto de excepciones en programación se refiere a eventos inesperados o errores que ocurren durante la ejecución de un programa. Estas excepciones pueden tener diferentes orígenes y niveles de gravedad, desde problemas críticos de hardware hasta errores lógicos en el código, como dividir por cero, tratar de acceder a un elemento fuera de los límites de un vector, o enviar un mensaje a una referencia que no apunta a ningún objeto

Test Driven Development

Es una técnica de programación, por la cual el código se escribe para satisfacer pruebas que ponen en evidencia la necesidad de dicho código. Es por ello que se llama “desarrollo conducido por las pruebas”

  • - Sólo se escribe nuevo código cuando una prueba ha fallado
  • - Se elimina la duplicación.

Maven

Maven es una herramienta que ayuda a desarrollar un proyecto basado en el entorno de una JDK (Java, Kotlin, Xtend, Scala, Groovy, etc.)

Funcionalidades

  • - Reificación de Proyecto / Artefacto en forma standard, declarativa y extensible
  • - Manejo de Dependencias.
  • - Manejo del Ciclo de Vida del Artefacto, incluyendo releases

Git

En esta materia utilizamos Git como herramienta para el control de versiones del código que vas a ir produciendo. El manejo que necesitás es básico, y está explicado en la guía rápida que te ofrecemos más abajo. El resto de los recursos pueden serte útiles si querés profundizar en el conocimiento de la herramienta.

Acá van a poder ver los comandos mas comunes que estaremos utilizando en Git:

Comandos basicos de Git

Clonar repositorio

git clone [URL del repo original]

Nos permite crear una copia local del repositorio original (situado en GitHub).

Agregar archivos al área de preparación (staging area)

git add * .

Con este comando agregamos todos los archivos que deben estar en el 'staging area', es decir, nos va a permitir "preparar" aquellos archivos que modificamos para que los podamos 'enviar' a través del commit.

Hacer commit de los cambios

git commit -m 'mensaje'

Nos permite "actualizar" nuestro repositorio local con aquellos cambios que hayamos realizado. En la parte de 'mensaje' debemos aclarar de manera descriptiva aquello que hayamos modificado, por ejemplo 'git commit -m 'Modifiqué los errores que tenía en la resolución de mi ejercicio''

Subir cambios al repositorio remoto

git push origin [rama]

Esto nos posibilita actualizar el repositorio original que tenemos en GitHub con aquellos cambios que hicimos en nuestro repositorio local. En '[rama]' debemos especificar si se trata de main o master, por ejemplo 'git push origin master'

Obtener cambios del repositorio remoto

git pull

Nos permite bajar de GitHub todos los cambios que recibió nuestro proyecto. Nos servirá cuando trabajemos en grupo y otra persona realice cambios en el mismo. De esta manera tendremos la versión más reciente del proyecto de manera local.

Configurar nombre de usuario global

git config --global user.name

Ponemos nuestro usuario luego de 'user.name' y cargamos nuestro usuario en nuestra PC PERSONAL.

Configurar correo electrónico global

git config --global user.email

Ponemos nuestro mail luego de 'user.email' y cargamos nuestro mail en nuestra PC PERSONAL.

Aclaración: El "--global" SOLO se utiliza en PC PERSONALES, NO en la Universidad.

Programas para la cursada

Git

https://git-scm.com/downloads

Git es un sistema de control de versiones distribuido que permite gestionar y controlar los cambios en el código fuente de un proyecto. Facilita la colaboración entre desarrolladores y el seguimiento histórico de las modificaciones realizadas.

JDK

https://www.oracle.com/java/technologies/downloads/#java23

El JDK es un conjunto de herramientas que permite desarrollar y ejecutar aplicaciones en Java. Incluye el compilador de Java, el entorno de ejecución (JRE) y otras utilidades necesarias para el desarrollo en este lenguaje.

Eclipse IDE

https://www.eclipse.org/downloads/packages/release/2024-03/m1/eclipse-ide-java-developers

Eclipse es un entorno de desarrollo integrado (IDE) que facilita la creación de aplicaciones en diversos lenguajes de programación, especialmente Java. Ofrece herramientas como editor de código, depurador y soporte para integración con sistemas de control de versiones como Git.

Maven

https://maven.apache.org/download.cgi

Maven es una herramienta de gestión y construcción de proyectos Java. Automatiza tareas como la compilación del código, la gestión de dependencias y la generación de paquetes ejecutables, facilitando la organización y mantenimiento de proyectos complejos.