~eduardo_quiros/cenfonotas

1065adf6f8dd6d8ba20e4ed64b9542e47cb1ce4d — Eduardo Quiros 6 months ago 0ee091b
eliminar archivos incompletos

Estos archivos estaban demasiado incompletos y prefiero borrarlos para
eliminar confusión
11 files changed, 0 insertions(+), 471 deletions(-)

D 2020/1/arquitectura.org
D 2020/1/estructuras-2.org
D 2020/1/estructuras-2/arboles-binarios-balanceados.md
D 2020/1/estructuras-2/hashing.md
D 2020/1/estructuras-2/repaso-conceptos.org
D 2020/1/patrones.org
D 2020/1/patrones/clase-4.md
D 2020/1/patrones/clase-5.md
D 2020/1/patrones/notas.org
D 2020/1/patrones/patrones_estructurales.md
D README.md
D 2020/1/arquitectura.org => 2020/1/arquitectura.org +0 -63
@@ 1,63 0,0 @@
#+title: Notas de Arquitectura de Computadores
#+author: Eduardo José Quirós Alvarado
#+LANGUAGE: es
* Semana 1
** Arquitectura del computador
- Cada computador tiene su organización
- La "Arquitectura de computadores" es las características de más bajo nivel (sin entrar en el nivel electrónico).
*** ¿Por qué estudiar arqui de commputadoras?
- Para entender mejor la organización de los programas
- Optimizar código
- Entender funcionamiento del SW
- Aumentar manejo de estructuras lógicas
- Entender procesos digitales
- Conocer la manera de pensar de la máquina
Un programa ejecutable, típicamente ocupa más espacio en RAM que en disco, esto es porque el ejecutable es silamente el segmento de codigo de la ejecución, sobre el que se edifican el segmento de datos y el stack.
Todo controlador tiene un procesador central propio.
*** El "gap" de la comunicación
Se han inventado formas de acercarse al computador:
- Lenguajes más naturales
- "Metáforas" y usabilidad
- Más dispositivos de I/O
Pero, en el fondo, el computador permanece igual
*** Concepto de máquina multinivel
- El ser humano ve una máquina monolítica pero está compuesta de varios niveles de abstacción.
- Para simplificar el análisis, se descompone en *"Niveles" o "Capas"*.
  - Nivel 0 :: Constituida por compuertas, que representan operaciones de lógica booleana combinacional o secuencial
  - Nivel 1 :: Componentes de funciones específicas (ALU, control, buses)
  - Nivel 2 :: Instruction Set Architecture (*ISA*)
  - Nivel 3 :: Sistemas Operativos - Administración de hardware en nivel 2, abstracción de dispositivos y memoria
  - Nivel 4 :: Lenguaje simbólico / ensamblador
  - Nivel 5 :: Software de Aplicación (editores, navegadores, etc.)
**** Evolución de los niveles
***** Nivel 0
- Existió al principio, todo alambrado y preconstituido
- "Hardware era software petrificado"
***** Nivel 1
- Aparecieron los primeros componentes de funciones específicas
- Modelo de Von Neumann:
  - Ejecución lineal de instrucciones
  - Programa almacenado en memoria
- Se podía distinguir claramente una arquitectura interna
***** Nivel 2 y 3
- Aparición casi simultánea
- Idea original de Familias de computadoras
- Invención del SO
***** Nivel 4
- Ideado originalmente en la era del nivel 2
- Precursores de lenguajes de progra de alto nivel: Fortran, Cobol, Algol
- Primer nivel de ensablador abstracto gracias a Knuth ("The Art of Computer Programming")
***** Nivel 5
- Lenguajes de alto nivel
* Semana 9
** Ensamblador
- La primera parte, con DB y DW son para declarar variables.
  - DB :: "Data-Byte", ocupa un espacio de un Byte.
  - DW :: "Data-Word", ocupa dos bytes de espacio.
  - ORG :: Se usa para denotar donde inicia, en memoria, el programa. Lo siguiente asignaría la dirección 1000 inicial en memoria, e manera hexadecimal:
        #+begin_src asm
ORG 1000H
#+end_src
- Solamente la variable BX tiene permitido estar en brackets "[]". Es decir, [BX].

*NOTA:* Es importante no solicitar memoria excedente a la memoria que posee el sistema.

D 2020/1/estructuras-2.org => 2020/1/estructuras-2.org +0 -59
@@ 1,59 0,0 @@
#+author: Eduardo José Quirós Alvarado
#+title: Notas de Estructuras de Datos 2

* Presentaciones

** Presentación 1: Máquinas de Estados Finitos

** Presentación 2: Algoritmos de Compresión

Consisten en un grupo de técnicas para reducir el espacio requerido para almacenar información. Existen dos tipos:

*** Lossy
- Existe una pérdida de datos al descomprimir. Esto se debe a que elimina detalles que son considerados poco importantes.
- Calidad < Ahorro.

*** Lossless
- No hay pérdida de datos. El algoritmo se enfoca en mantener la calidad del archivo original
- Calidad > Ahorro.

**** Ejemplo: Run Length Encoding
Busca secuencias repetidas de caracteres y las almacena en la cantidad de veces que se repite. 
Por ejemplo: "bbb" se pdoría almacenar como "3b", en este caso, ahorrando un byte.

**** Ejemplo: Huffman Encoding
Se utiliza un árbol binario, cuyos nodos almacenan dos datos: el caracter y su frecuencia.

***** Pasos
1. Crear un hashmap con un conteo de la frecuencia de las ocurrencias del caracter.
2. Se almacenan los caracteres en pares en árboles binarios, cada uno como una hoja, teniendo un padre cuyo valor es la sumatoria de las frecuencias de las hojas.
3. Luego se agarran estos árboles y se acomodan, a su vez, en árboles más grandes. Creando un nuevo nodo padre cuyo valor es la suma de los nodos padres de cada árbol.
4. Se asignan valores para recodificar los valores de los caracteres. Es decir, si hay que bajar 3 veces a la izquierda del árbol, se recodifica el caracter como "000" en lugar de los 8 bits que normalmente serían.
5. Se imprime el string entero de números binarios para representar el codificado.

** Presentación 3: Estructuras de Datos y Bases de Datos

*** Base de Datos
Es un software cuyo enfoque consiste en la persistencia del almacenamiento de información y se centra en el principio *ACID*:
- Atomicity :: Las transacciones nunca deben quedar a medias, ocurren o no.

- Consistency :: 

como se juntan a la estructuras de datos?


*** Qué pasa si las filas de una tabla necesitan demasiado espacio en el disco?
Se pueden utilizar índices para indicar (duh) en que lugares separados se encuentran los distintos 
** Presentación 4: Algoritmos Criptográficos
- Se basan en cambiar el contenido de un mensaje de manera que solamente el receptor deseado y el emisor puedan entenderlo.
- Cuál es la diferencia entre buena encripción y mala? :: 

Actualmente existen 3 tipos:
*** De llave pública
Se generan dos llaves, una que encripta (privada) y la otra que desencripta (pública). Por lo que, para comunicarme un mensaje, el emisor debe poseer mi llave pública para encriptar el mensaje, y yo mi llave privada para desencriptarlo.
*** LLave secreta (Simétrica)
- Utiliza una sola llave
- No es recomendable dado que la llave que se comparte 
*** Hashes
- Función que recibe un input y retorna una cantidad predefinida de bytes.
- Puede encontrar colisiones fácilmente.

D 2020/1/estructuras-2/arboles-binarios-balanceados.md => 2020/1/estructuras-2/arboles-binarios-balanceados.md +0 -10
@@ 1,10 0,0 @@
# Árboles Binarios Balanceados (ABB)

## ¿Qué pasa si un árbol está balanceado?
Si la altura determina la cantidad máxima de comparaciones, entonces lo ideal es que el árbol tenga la menor altura posible.

## ¿Qué es un árbol balanceado?
Es un árbol binario que tiene, en todos sus niveles (excepto el último) están integrados a la máxima capacidad de nodos. Es decir: solamente el último nivel puede tener desbalance de nodos de algún lado.

## ¿Qué es un AVL?
Es un arbin de búsqueda que intenta mantenerse balanceado cuando se insertan o eliminan elementos.

D 2020/1/estructuras-2/hashing.md => 2020/1/estructuras-2/hashing.md +0 -13
@@ 1,13 0,0 @@
---
title: Hashing
author: Eduardo José Quirós Alvarado
---
## Universo de datos
- Tiene claves únicas para identificar cada elemento.
## Función de Hash
- Se pasa esa llave por un algoritmo que retorna un índice de una tabla de hashes. Este, a su vez, es un arreglo.
## Tablas de Hash
- Pueden ser abiertas o cerradas, referente al mecanismo de control de colisiones
- Aumentan la velocidad de búsqueda sin la necesidad de tener elementos ordenados.
- Tiempo de búsqueda idependiente de la cantidad de elementos almacenados
- Se puede usar una lista enlazada con tiempo O(n), pero una tabla de hashes lo reduciría a un tiempo O(1)

D 2020/1/estructuras-2/repaso-conceptos.org => 2020/1/estructuras-2/repaso-conceptos.org +0 -9
@@ 1,9 0,0 @@
#+title: Repaso de Conceptos del curso de Estructuras de datos 1
* Estructuras de Datos
   - lineales
     - listas :: cadena de nodos que apuntan en secuencia
     - colas :: lstas acomodadas "nodo detrás de nodo"
     - pilas :: listas que se acomodan "nodo sobre nodo"
   - no lineales
     - árboles
     - grafos

D 2020/1/patrones.org => 2020/1/patrones.org +0 -50
@@ 1,50 0,0 @@
#+title: Notas de Programación con Patrones
#+author: Eduardo José Quirós Alvarado
* Patrones de Comportamiento
- Tienen que ver con la implementación de algoritmos.
- Desarrollan la estructura de 
** Cadena de Responsabilidad
*** Role
- lista de objetos Handler
- 
*** Diseño
- Debe tener un *Controlador* que le asigne recursos a 
*** Consecuencias
- 
** Comando
- Crea distancia entre el cliente que solicta una operación y el objeto que realiza tal operación.
- Permite parametrizar clientes para distintas soluciones.
*** Role
**** Participantes
- Comando :: Declara una interfaz para ejecutar una operación.
- Comando concreto :: Enlaza el *Receptor* y la operación mediante la implementación de la acción.
- Cliente :: Crea un *ComandoConcreto* y le asigna un *Receptor*.
- Invocador :: solicita al *Comando* realizar la operación.
- Receptor :: sabe realizar la acción asociada a la solicitud.
*** Diseño
El cliente emite una llamada para ejecutar en el invocador, que le solicita al comando y este a su vez la ejecuta en el *receptor*.
*** Uso
Encapsula un mensaje como un objeto, permitiendo que se gestionen colas de mensaje y deshacer operaciones.
** Mediador
*** Role
- Encapsula la interacción entre dos objetos.
**** Participantes
- Mediador :: Define la interfaz para comunicar objetos "Colega".
- Mediador Concreto :: implementa la cooperación entre colegas y conoce y mantiene sus colegas.
- Clases colegas :: conoce a su mediador y se comunica con él en lugar de con sus colegas directamente.
** Iterador
*** Role
- Forma de interactuar con agregaciones o composiciones de un objeto independientemente de su representación.
- Acceder a elementos de una colección de forma secuencial.
- Permiter filtrar elemetos a medida que se generan.
**** Participantes
- Iterator :: Define la interfaz para acceder y recorrer los elementos.
- Iterador Concreto :: Mantiene el registro de la última posición.
*** Consecuencias
- Diferentes formas de recorrer una colección de objetos.
- Hay un encargado de determinar la posición actual.
- Permite acceder a la colección sin conocer el código de dichos objetos.
- Usando varios *Iteradores* permite hacer varios recorridos simultáneos.
* Notas del proyecto
- El jugador no puede atacar a otro, solamente usar sus poderes especiales.
- Para la IA se puede usar e patrón de *Cadena de Responsabilidad* para determinar un auto-ataque.

D 2020/1/patrones/clase-4.md => 2020/1/patrones/clase-4.md +0 -29
@@ 1,29 0,0 @@
# Clase 4: Atributos de calidad en el diseño
## Clasificación de Patrones
### Creacionales
- Fábrica abstracta: proveer interfaz para la creación de objetos sin especificar la clase.
- Constructor: Separa la creación de objetos complejos de la representación de los mismos.
- Método fábrica: Se define una interface de creación de objetos, instanciación se delega a la subclase.
- Prototipo: Se especifica un modelo de objetos a crear usando una instancia genérica que se clona.
- Singleton: Clase con una sola instancia.

### Estructurales
- Adaptador: convierte la interfaz de una clase en otra que el cliente espera.
- Puente: Separa una abstracción de su implementación de forma que ambas pueden variar independientemente.
- Compuesto: Relaciones cliente-maestro en forma de árbol.
- Peso liviano: Compartir elementos para manejar grandes cantidades de objetos eficientemente.
- Proxy: Objeto de control de acceso a otros.
- Decorador: Aumentar responsabilidades de un objeto en tiempo de ejecución.
- Fachada: Reducir complejidad 

### Conducta
- Cadena de Responsabilidad: Permitir que varios objetos puedan procesar una solicitud hasta que sea manejada.
- Comando: Se encapsula la solicitud en sí como un objeto para usarla como parámetro en otros objetos.
- Intérprete: Se presenta el objeto como un intérprete de un lenguaje.
- Mediador: crear un objeto que define como interactúan los otros.
- Memento: guardar el estado de un objeto.
- Observador: notifica cuando el estado de algún objeto cambia.
- Estado: Permite alterar la conducta de un objeto cuando su estado muta.
- Estrategia: encapsular algoritmos y los vuelve intercambiables.
- Método patrón: Definir el esqueleto de una operación, delegando detalles a la subclase.
- Visitante: Representa las operaciones en función de la estructura del objeto.

D 2020/1/patrones/clase-5.md => 2020/1/patrones/clase-5.md +0 -37
@@ 1,37 0,0 @@
# Clase 5: 
## ¿Qué son los patrones creacionales?
Patrones que hacen que el sistema sea independiente de los objetos y su creación.
## Principales objetivos
- Abstraer el proceso de instanciación.
- No son excluyentes y, a veces, se complementan.
- Aumentan la flexibilidad del sistema en términos de qué, quién, cómo, cuándo 
## Fábrica abstracta
### Role
Utilizado para crear productos que existen en **familias** y están diseñados para ser producidos grupalmente.

Se puede refinar a fábricas en concreto.

Cada fábrica puede crear diferentes productos de diferentes tipos.

**Aisla** las definiciones
### Participantes
- **Fabrica Abstracta:** declara la interfaz que crean los productos abstractos.
- **Fábrica concreta:** Implementa las operaciones para crear productos concretos.
- **Producto abstracto:** Declara la interfaz de un tipo de producto.
- **Producto concreto:** Define el producto a crearse por la fábrica específica e implementa la interfaz de **Producto Abstracto**.
- **Cliente:** Usa sólo las interfaces de fábrica y producto.

## Constructor
### Role
Separa la especificación de la construcción.
#### Participantes
- Builder: Interfaz que define lo que se puede construir
- Director: Secuencia de operaciones que se pueden seguir para crear un **Producto**.
- Constructor: Clase que es llamada por un **Director** para hacer partes de productos.
- Producto: Objeto en construcción.
###Diseño
Se basa en Directores y Constructores.

El punto sobre el patrón es que diferentes constructores pueden suministrar partes diferentes que se complementen.

El **Director** tiene una forma individual de juntar partes en oferta desde la interfaz **Builder**. El **Producto** mantiene una lista actualizada de las piezas a medida que se crean y la lista es el resultado del proceso.

D 2020/1/patrones/notas.org => 2020/1/patrones/notas.org +0 -166
@@ 1,166 0,0 @@
# -*- mode: org -*-
#+TITLE: Notas de Programación con Patrones
* Semana 1
** Introducción a patrones de programación
- Se aprenderán 23 patrones, que harán más sencillo el desarrollo de programas.
** Habrán 2 exámenes
- Semana 5
- Semana 13
  - programado
** Quices
- hay 5 ptos extra, se obtienen al tener la nota en el top 5 de todos los quices
- semanas 2, 3, 7, 10, y 11
** Proyecto
- desarrollar un juego
- en grupo
- hacer presentación
- formal
** Labs en casa
- proyectos programados
- semanas 6, 9, y 12

** Diseño
- Es sentarse a plasmar todos los datos de una idea para luego poder enfocarse en la construcción del producto.
- Surge luego del análisis y toma de requerimientos de un proyecto.

** Diseño Arquitectónico
- "Arquitectura lógica"
- contempla:
  - mantenibilidad
  - flexibilidad
  - auditabilidad
- tipos:
  - modular
  - cliente-servidor
  - arquitectura de capas
  - MVC
  - pipeline
  - entre pares
  - pizarra
  - orientada a servicios (SOA)
  - micro servicios (MSA)
  - dirigida por eventos
  - máquninas virtuales

** Patrones
- Son estructuras que se repiten en diversas construcciones.
- Hay problemas en software que se resuelven una y otra vez, de manera continua

*** Especificación de patrones
- Nombre
- Propósito (objetivo)
- Problema (definición del problema)
- Solución (como el patrón ayuda a solucionar el problema)
- Participantes y colaboradores
- Consecuencias (causa y efecto)
- Implementación (pasos a seguir)

*** UML
- relaciones entre clases

*** Diseños inadecuados
- Es importante definir correctmente los requerimientos que debe cumplir, para saber cuál herramienta es la más adecuada

*** Elementos de mejora
- Principios que proporcionan bases de (*SOLID*)
  - S :: principio de responsabilidad única, cada clase tiene una sola responsabilidad concreta
  - Open-Close :: no se debe modificar el código de una clase, sino, deben estar extendidas
    - Forma más sencilla es el uso de herencia o interfaces.
    - Es más fácil de cumplir si se cumple tambien
  - Liskov Substitution :: Una clase derivada de otra debe poder ser sustituida por su superclase y los métodos de la derivada no deben provocar un mal funcionamiento de los métodos de la clase base.
  - Interface Segregation :: muchas interfaces de pocos métodos > pocas interfaces con muchos métodos
    - ninguna clase está obligada a implementar métodos de una interfaz
  - Dependency Inversion :: 

*** Patrones
- Se prefiere la composición a la herencia
- Identificar puntos de reusabilidad de un objeto y convertirlos en una interface
* Semana 2
** Objetivos de un buen diseño
- Eficiencia :: evitar sobrecargar el diseño
- Economía ::
- Las unidades a implementar son "buenas" :: deben ser de calidad
- Unidades a implementar deben proporcionar puntos clave modificables :: parametrizar "settings"
- Rendimiento de la solución :: debe evitar consumir cantidades excesivas de recursos
- Manejo de la Complejidad :: 
** El Proceso
1. Tomar individualmente los elements del sistema.
2. Se detalla cada elemento.
3. Una vez detallado cada elemento, se reinicia el proceso incorporando las relaciones entre los elementos detallados.
** Diseños inadecuados
Por lo general, son malas decisiones implementadas, inevitablemente va a ser necesario retrabajar la solución.
- Fragilidad :: Facilidad con la que se cae un programa.
- Inmovilidad :: Dificultad para poder reutilizar código.
- *Viscosidad*
  - Del diseño :: Cuando el sistema está construido de tal manera que fomenta un mal diseño al complicar la implementación de .
  - Del ambiente :: Cuando las limitaciones de las herramientas de desarrollo fomentan que los desarrolladores tomen malas decisiones.
- Repetición innecesaria :: Es la duplicación de bloques de código.
- Comlpejidad innecesaria :: Cuando el código es difícil de comprender para alguien que lo esté leyendo.
** ¿Por qué es tan difícil diseñar?
- Valorar los pros y contras.
- Mantener equilibrio entre creación de cambios y la restricción de los mismos.
- El diseño *NO ES 100% DETERMINÍSTICO*, es *HEURÍSTICO*.
- Malos diseños se dan por:
  - Apatía
  - Falta de control
  - Curva de aprendizaje
  - Simplificación excesiva
  - Ignorancia
  - Avaricia
  - Orgullo
  - Pereza
** Debemos recordar...
- Todo diseño evoluciona.
- Buenas prácticas:
  - Minimizar complejidad.
  - Evitar elementos innecesarios.
- Una de las razones del fracaso son las técnicas elevadas en la producción de software.
- Aplicar principios de diseño (Inicio del proyecto)
- Usar patrones (diseño y desarrollo)
- Pruebas, pruebas, pruebas... (desarrollo y  producción)
- Refactoring (tras acabar el proyecto, mejorarlo)
** Principios
*** Modularidad
Habilidad de dividir un sistema en diversos módulos.
- Capacidad de descomponer un sistema complejo.
  - Basado en "divide y vencerás".
- Capacidad de componer a través de sus módulos
  - Cada subprograma debe completar y resolver en conjunto el problema general.
  - Reutilización de código si los módulos están diseñados con ello en  mente.
- Comprensión del sistema en partes :: Cada parte debe ayudar a la comprensión del código y del sistema.
** TODO Tarea para el lunes 3, enunciado en presentación.
* Semana 3
** Nivel Superior
** Nivel Miembro
- private :: especifica que sólo se puede acceder desde su mismo clase.
- protected :: especifica que el miembro solo se puede acceder dentro de su propio paquete.
** Aserciones
- Deben controlar los casos que *NO* deben ocurrir.
** Patrones de Responsabilidad
*** Experto
- Una responsabilidad debe asignarse al objeto que tiene la información necesaria.
- Antes de asignar responsabilidades: 
*** Creador
¿Quien debe ser responsable por la creación de una instancia de un objeto?
*** Alta Cohesión
*** Controlador
El que se debe encargar de manejar entradas
- Asigna el manejo de entradas al sistema a:
*** Polimorfismo
- Use operaciones
*** Fabricación Pura
Se debe crear un conjunto coherente de responsabilidades que genere los objetos.
*** Redirección
Asigne responsabilidad a un objeto intermediario que medie entre los componentes o servicios y evite el acoplamiento.
*** Variaciones Protegidas
- Diseñar objetos de tal manera que cambios a uno no altere a los demás.
*** Generalidades
- Todo diseño debe tener un propósito
*** Atributos de Calidad
- Rendimiento :: Medida de la respuesta de un sistema.
  - Tiempo de respuesta de eventos
  - Número de eventos procesados en un intervalo
- Seguridad :: Capacidad del sistema de resistir intrusiones.
- Disponibilidad :: Medida en la que el sistema se encuentra disponible
- Funcionalidad :: El sistema hace lo que se espera que haga.
- Usabilidad :: Amalgama de características que 

D 2020/1/patrones/patrones_estructurales.md => 2020/1/patrones/patrones_estructurales.md +0 -22
@@ 1,22 0,0 @@
# Patrones estructurales
## Adaptador
- Une tipos no diseñados para funcionar entre sí.
- Útil para código heredado.
- Diferentes tipos:
	- Clase
		- Menos utilizada, dado que usa herencia múltiple.
		- 
	- Objeto
	- Bidireccional
	- Conectable
- Proporciona funcionalidad requerida pero con interfaz diferente.

### Utilidad
- Kits de herramientas
- Cuando se tiene una interfaz de dominio 

### Elegir el mejor adaptador
- De clase: Sencillo y versátil, invisible al cliente.
- Objeto: Extensible a subclases del adaptador.
- Bidireccional: Permite diferentes vistas.
- Enchufable: permite colocarlo y luego removerlo.

D README.md => README.md +0 -13
@@ 1,13 0,0 @@

# Table of Contents

1.  [Notas de cursos de UCenfotec](#orgad7d17d)



<a id="orgad7d17d"></a>

# Notas de cursos de UCenfotec

Este es un repositorio de las notas tomadas durante los cursos de la universidad Cenfotec.