Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 39

¿Cómo

me siento
hoy?
Comenta brevemente tu
estado de ánimo con tu
docente y compañeros
¿Qué
hicimos la
clase
anterior?
Comenta los temas tratados en
clase anterior
Agenda
Introducción a la construcción
de software
Explicación de qué comprende la
Temas ha tratar en la sesión de construcción de software, diferenciándola
clase 1 -2 del simple desarrollo de software

Principios de programación
DRY , KISS , YAGNI, y SOLID

Patrones de diseño.
¿Qué son los patrones de diseño y por
qué son importantes en la construcción de
software robusta y mantenible.?

Versionado
Importancia de un sistema de control de
versiones (como Git) en proyectos de
software grandes y pequeños.
Saberes previos
Temas básicos que sirven de base para el avance de la
asignatura

Describa qué es un patrón


¿Puede explicar qué de diseño en el contexto
significa el principio de ¿Qué es un sistema de de la programación
programación DRY y por control de versiones y orientada a objetos y
qué es importante cuál es su propósito en el explique brevemente el
aplicarlo en el desarrollo desarrollo de software? patrón Singleton o
de software? cualquier otro patrón de
diseño que conozca.
Utilidad de la asignatura
¿Cómo podría el patrón de diseño Singleton ser
utilizado para mejorar la eficiencia operativa en
01
una aplicación que gestiona conexiones a una
base de datos?
Explique cómo el uso de un sistema de control
de versiones como Git puede facilitar la
02
colaboración en un proyecto de software grande
con múltiples desarrolladores
Discuta cómo los principios de programación
03 como DRY y KISS contribuyen a la calidad del
software
Logro de la clase
Al finalizar estas dos semanas, los estudiantes
habrán adquirido una comprensión fundamental
de los principios y prácticas esenciales en la
construcción de software. Serán capaces de:

IDENTIFICAR Y APLICAR PRINCIPIOS FUNDAMENTALES DE


PROGRAMACIÓN
UTILIZAR PATRONES DE DISEÑO EFECTIVAMENTE
GESTIONAR VERSIONES DE PROYECTOS DE SOFTWARE
DESARROLLAR Y EVALUAR SOFTWARE UTILIZANDO CLEAN
ARCHITECTURE
Introducción a la
construcción de
software
"La programación no es acerca de lo que
sabes; se trata de lo que puedes
averiguar."

- Chris Pine.
Definición de Construcción de Software
La construcción de software incluye todas
las actividades relacionadas con la
producción del software en sí, desde la
codificación hasta la compilación, el testing
y la depuración. No se limita sólo al acto de
escribir código, sino que también abarca la
planificación inicial de las estructuras de
datos y algoritmos, la implementación de
modelos funcionales y la gestión de
versiones del software a lo largo del tiempo.
Componentes clave
de la Construcción de Codificación

Software Acto de escribir código fuente en lenguajes de


programación como Java, C#, Python, etc.

Compilación
Transformar el código fuente escrito en un lenguaje de
programación a un código máquina que puede ser
ejecutado por un computador.

Testing
Pruebas involucran la verificación de que el software
funciona según lo esperado.
Componentes clave
de la Construcción de
Software
Depuración

Proceso de identificar y corregir errores en el software

Mantenimiento
Incluye la actualización, la mejora y la corrección del
software después de su despliegue
Importancia de la Construcción de
Software

La construcción de software es
fundamental no sólo para crear
aplicaciones funcionales y eficientes,
sino también para asegurar que
estas puedan evolucionar con las
necesidades cambiantes de los
usuarios y la tecnología.
Importancia de la Construcción de
Software

Escalabilidad
Facilita la ampliación del software para soportar más
usuarios o procesos sin comprometer el rendimiento

Mantenibilidad
Simplifica la introducción de cambios, correcciones de
errores y mejoras.

Calidad
Aumenta la robustez del software, reduciendo errores y
mejorando la experiencia del usuario.
Principios de
programación
"La simplicidad es la sofisticación
suprema."

- Leonardo da Vinci.
Principios clave en
programación DRY (Don't Repeat Yourself)

Este principio sostiene que cada pieza de conocimiento


debe tener una representación única, inequívoca y
autorizada dentro de un sistema. Repetir el mismo código
en diferentes partes de un programa no solo hace que sea
más difícil de mantener, sino que también aumenta la
probabilidad de errores si se necesita hacer un cambio.

Aplicación
Para aplicar DRY, utiliza funciones, clases y otras
abstracciones para encapsular comportamientos que se
repiten. Esto no solo reduce la duplicidad sino que también
promueve la reutilización del código.
Principios clave en
programación KISS (Keep It Simple, Stupid)

KISS aboga por la simplicidad en el diseño del código,


argumentando que los sistemas funcionan mejor si se
mantienen simples y no se complica innecesariamente.

Aplicación
Cuando implementes soluciones, opta por la opción más
simple que funcione. Evita usar técnicas complejas donde
un enfoque simple y claro sería suficiente.
Principios clave en
programación YAGNI (You Aren’t Gonna Need It)

Este principio es un llamado a evitar añadir funcionalidad


hasta que sea necesaria. Es un error común en desarrollo
de software anticipar funcionalidades que podríamos
necesitar en el futuro y terminar implementándolas
demasiado pronto.

Aplicación
Solo implementa cosas cuando realmente las necesites, no
cuando simplemente pienses que las necesitarás. Esto
ayuda a evitar la complejidad innecesaria y mantiene el
proyecto ágil y manejable.
Principios clave en
programación SOLID

SOLID es un acrónimo para cinco principios de diseño


orientado a objetos que facilitan el desarrollo de software
más comprensible, flexible y mantenible.
Single Responsibility Principle (Principio de
responsabilidad única)
Open/Closed Principle (Principio de abierto/cerrado)
Liskov Substitution Principle (Principio de sustitución
de Liskov)
Interface Segregation Principle (Principio de
segregación de interfaz)
Dependency Inversion Principle (Principio de inversión
de dependencia)
Principios clave en
programación
Aplicación
Estos principios pueden ser aplicados mediante el diseño
cuidadoso de clases e interfaces, asegurando que cada
módulo o clase tenga una sola razón para cambiar, que las
extensiones puedan realizarse sin modificar el código
existente, y que las implementaciones puedan ser
intercambiadas con facilidad.
Importancia de los principios de
programación

Mejorar la mantenibilidad: Código más simple y


modular es más fácil de entender y modificar.
Reducir el costo de cambios: Principios como
SOLID facilitan la modificación y extensión del
sistema sin grandes costos asociados.
Promover la reutilización del código: Sistemas
bien diseñados con baja duplicidad y alta
cohesión facilitan la reutilización de componentes
en otros proyectos.
Patrones de diseño
y versionado
"Los patrones de diseño son el vocabulario
de soluciones que todos los desarrolladores
deberían conocer."

- Mark Jason Dominus.


Definición de patrones de diseño

Patrones de Diseño son soluciones típicas a


problemas comunes en el diseño de software. No
son diseños acabados que se pueden transformar
directamente en código, sino descripciones o
plantillas para cómo resolver un problema que
pueden ser adaptadas al contexto particular de su
aplicación.
Tipos principales de
patrones de diseño
Creacionales

Se centran en mecanismos de creación de objetos,


intentando aumentar la flexibilidad y la reutilización del
código existente.

Ejemplos
Singleton, Factory Method, Abstract Factory, Builder,
Prototype.
Tipos principales de
patrones de diseño
Estructurales

Tratan de componer grupos de objetos en estructuras


mayores, generalmente para simplificar relaciones entre
objetos o proporcionar una manera eficiente de organizar
el sistema.

Ejemplos
Adapter, Composite, Proxy, Flyweight, Facade, Bridge,
Decorator.
Tipos principales de
patrones de diseño
De Comportamiento

Se ocupan de la comunicación efectiva y la asignación de


responsabilidades entre objetos.

Ejemplos
Observer, Strategy, Command, Iterator, Mediator, State,
Visitor, Template Method.
Aplicación en C#
Aplicación de
patrones de diseño

Singleton
Garantiza que una clase tenga una única instancia y
proporciona un punto de acceso global a ella
Aplicación en C#
Aplicación de
patrones de diseño

Observer
Permite a un objeto publicar cambios en su estado. Otros
objetos se suscriben para recibir notificaciones de los
cambios.
Importancia de los
patrones de diseño
Nos permite

Evitar reinventar la rueda, utilizando soluciones


probadas y eficaces.
Mejorar la comunicación entre diseñadores y
desarrolladores mediante un lenguaje común.
Facilitar el mantenimiento del software al seguir un
estándar reconocido y optimizado.
Versionado

"En la programación, como en todo en la


vida, para estar en error es ser humano,
pero para realmente embrollar las cosas
necesitas un ordenador."

- Paul R. Ehrlich
Versionado
El versionado, una práctica esencial para la
gestión eficaz de proyectos de software. El
versionado permite a los desarrolladores controlar
y gestionar los cambios en el código fuente,
facilitando la colaboración, el mantenimiento y la
trazabilidad en proyectos complejos y dinámicos.
Conoceremos los sistemas de control de versiones
más utilizados, con un enfoque especial en Git, y
cómo aplicar estas herramientas en el contexto
del desarrollo de software profesional.
Conceptos clave del
Versionado
Versionado semántico (SemVer)

Definición
El versionado semántico es una convención para asignar
versiones de manera que reflejen el tipo de cambios
realizados, usando tres números: mayor, menor y parche
(por ejemplo, 1.4.3).
Mayor: Cambios que hacen incompatible la nueva
versión con versiones anteriores.
Menor: Adiciones que son compatibles con
versiones anteriores.
Parche: Correcciones de errores compatibles con
versiones anteriores.
Conceptos clave del
Versionado
Control de versiones

Importancia: Permite a los equipos de desarrollo


colaborar sin conflictos, proporciona un historial claro
de cambios y facilita la gestión de diferentes versiones
del producto final.
Herramientas comunes: Git es la herramienta de
control de versiones más predominante, seguida por
otros sistemas como Mercurial y SVN. Sin embargo,
Git es preferido debido a su eficiencia en la gestión de
grandes proyectos y su sistema de ramificación que
facilita la experimentación y el manejo de diferentes
líneas de desarrollo.
Aplicación práctica
de Git Configuración inicial de Git
Instalación: Descarga e instala Git desde su sitio web oficial.
Configuración básica: Configura tu nombre de usuario y correo
electrónico, que serán utilizados en tus commits.
Aplicación práctica
de Git
Uso básico de Git
Inicialización de un Repositorio:

Agregar Cambios:
Aplicación práctica
de Git
Uso básico de Git
Manejo de ramas:

Fusionar cambios (Merge)


Aplicación práctica
de Git

Uso básico de Git


Uso de remote (GitHub, GitLab, Bitbucket)
Importancia del
versionado
El versionado es crucial para:
Colaboración: Facilita el trabajo en equipo permitiendo que
múltiples desarrolladores trabajen en diferentes características
simultáneamente sin interferir unos con otros.
Control de calidad: Permite revertir a versiones anteriores si se
introduce un error, asegurando la calidad del software.
Auditoría y conformidad: Proporciona un registro detallado de
cuándo y por qué se hicieron cambios, crucial para la auditoría y
cumplimiento de normativas.
¿Que aprendimos hoy?
Exploramos los fundamentos esenciales para el desarrollo
eficaz de software. La primera semana está dedicada a
introducir la construcción de software, destacando procesos
como la codificación, compilación, y testing, junto con
principios de programación fundamentales como DRY, KISS,
YAGNI, y SOLID. Estos principios ayudan a los estudiantes a
escribir código que es fácil de mantener y escalar. En la
segunda semana, el foco se traslada a los patrones de diseño,
clasificados en creacionales, estructurales y de
comportamiento, con ejemplos prácticos como Singleton,
Observer y Strategy que los estudiantes implementan en C#.
Además, se introduce el versionado con Git, enseñando a los
estudiantes a gestionar eficientemente las versiones del
software a través de commits, merges, y uso de ramas.
Preguntas
Muchas gracias

También podría gustarte