Mostrando entradas con la etiqueta Ingenieria. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ingenieria. Mostrar todas las entradas

jueves, 25 de abril de 2019

Sobrecarga de operadores y Plantillas




Sobrecarga de Operadores

 




Plantillas y patron Iterador













SOLID

Patrones de diseño

Bienvenid@s
Esta vez vamos a realizar un pequeño resumen de 

"Patrones de Diseño Elementos de software orientado a objetos reutilizable"
Gamma, Helm ,Johnson & Vlidissides.

Realizaremos resumen de los patrones de nuestro interés por lo que no pretendemos infringir los derechos de autor, el libro se encuentra  disponible en la web.


Como hemos estudiado antes el paradigma de la programación orientada a objetos que hemos definido anteriormente podremos adentrarnos en el tema de patrones de diseño con el fin de reutilizar código de manera eficiente, en nuestro caso haremos referencia al lenguaje de programación C++, y si es posible acompañarlo de un tutorial para clarificar las situaciones de cada patrón. 


¿Qué es un patrón de diseño ?


"Según Christopher Alexander, “cada patrón describe un problema que ocurre una y otra vez en nues- tro entorno, así como la solución a ese problema, de tal modo que se pueda aplicar esta solución un millón de veces, sin hacer lo mismo dos veces”" (Gamma, Helm ,Johnson & Vlidissides,1995)


Destacaremos elementos importantes sobre los patrones de diseño:


  • "El nombre del patrón permite describir, en una o dos palabras, un problema de diseño junto con sus soluciones y consecuencias." (Gamma, Helm ,Johnson & Vlidissides,1995)


  • "El problema describe cuándo aplicar el patrón. Explica el problema y su contexto" (Gamma, Helm ,Johnson & Vlidissides,1995)
  • "un patrón es más bien como una plantilla que puede aplicarse en muchas situaciones di-ferentes. El patrón proporciona una descripción abstracta de un problema de diseño y cómo lo resuelve una disposición general de elementos (en nuestro caso, clases y objetos)."  (Gamma, Helm ,Johnson & Vlidissides,1995)

Patrones Estructurales


"Los patrones estructurales se ocupan de cómo se combinan las clases y los objetos para formar es-
tructuras más grandes. Los patrones estructurales de clases hacen uso de la herencia para componer
interfaces o implementaciones."  (Gamma, Helm ,Johnson & Vlidissides,1995)


  •  Composite : 
¿Qué proposito tiene este patrón ? 
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.
Analicemos un momento cada uno de los componentes del ejemplo: 
Componente (Gráfico)
  •  Declara la Interfaz de los objetos de la composición.
  •  Implementa el comportamiento predeterminado de la interfaz que es común a todas las clases.
  •  Declara una Interfaz para acceder a sus componentes hijos y gestionarlos. (opcional) define una Interfaz para acceder al padre de un componente en la estructura recursiva y. si es necesario, la implementa.
Hoja (Rectángulo, Linea, Texto, etc.) 
  •   Representa objetos hoja en la composición. Una hoja no tiene hijos.
  •   Define el comportamiento de los objetos primitivos de la composición.
Compuesto (Dibujo) 
  •   Define el comportamiento de los componentes que tienen hijos. 
  •   Almacena componentes hijos.
  •   Implementa las operaciones de la interfaz Componente relacionadas con los hijos.
Cliente: Manipula objetos en la composición a través de la interfaz Componente.
 
  • Decorador
Proposito: 

Asigna responsabilidades adicionales a un objeto dinámicamente, proporcionando una alternativa fle-
xible a la herencia para extender la funcionalidad. (Envoltorio)

Use el Decorador
• Para añadir objetos individuales de forma dinámica y transparente, es decir, sin afectar a otros objetos.
• Para responsabilidades que pueden ser retiradas.
• Cuando la extensión mediante la herencia no es viable. A veces es posible tener un gran número de extensiones independientes, produciéndose una explosión de subclases para permitir todas las combinaciones. O puede ser que una definición de una clase esté oculta o que no esté disponi- ble para ser heredada.






Patrones de Creación
  • Singleton: Busca crear una unica instacia de la clase





Method Factory 
...

Patrones de Comportamiento
  • Patrón de estrategia o Politica (Policy based): El patron de estrategia nos permite crear diferentes escenarios para resolver un problema de diferentes formas  este patron se puede puede aplicar cuando se encuentran los siguientes escenarios descritos por Gamma, Helm ,Johnson & Vlidissides en 1995

    •  "Muchas clases relacionadas difieren solo en su comportamiento.Las estrategias permiten configurar una clase con un determinado comportamiento de muchos posibles 
    • Se necesitan distintas variantes de un algoritmo 
Estructura: En el siguiente video se puede observar como se representa la estructura de este patrón 



Podemos ver el papel que toma cada entidad y nos referiremos a su función de la siguiente manera basandonos en lo descrito por Gamma, Helm ,Johnson & Vlidissides en 199: 


Existe una entidad que se llama Estrategia  esta es una clase padre y es abstracta (polimorfismo) debido a esto se van a utilizar clases hijas 

Las clases EstrategiasContretas implentan sus algoritmos de acuerdo a lo que se quiera trabajar 

Existe una clase compuesto que es donde se configuran y mantienen una estrategia manejada por medio de la interfaz.

viernes, 29 de marzo de 2019

Discrete Math

This is one of the most visited post but I need you to read in articles and projects the most recent post


Useful playlist

What is Big O ?

Big O notation

Boolean Matrix

Graph Theory

Shortest Path using Dijkstra's Algorithm

Trees and Binary Search Trees

martes, 26 de marzo de 2019

Estructuras Discretas

Recursividad
Para entender la recursividad, primero , hay que entender la recursividad


Relaciones de recurrencia

Relaciones Binarias

Fundamentos de C++

Para aprender C++ hay muchos recursos disponibles, no importa si sos estudiante de ingenieria o aficionado a la programación, aquí voy a poner enlaces de los que considero los mejores, estos mismos recomiendo ser acompañados por la plataforma 

Solo Learn

https://www.sololearn.com/Course/CPlusPlus/


El libro C++ de Jorge Sanchez  https://jorgesanchez.net/


Codigo Facilito ahora cuenta con su propia plataforma sin embargo sus videos se encuentran en youtube 

https://codigofacilito.com/cursos/c-plus-plus


Programación ATS

https://www.youtube.com/watch?v=ld4nzao5XAc


sábado, 22 de julio de 2017

Funciones (Parte I)

Concepto de relación: implica correspondencia entre los elementos de dos conjuntos.

    • elementos o variables: lo que conforma un conjunto.
    • conjuntos = grupos.
Ejemplo:

en el conjunto A se encuentra el nombre de padres de familia  y en el B el nombre de sus hijas en este caso si observamos a Jorge  tiene 2 hijas que son Carina y Cecilia  


En una relación puede sobrar elementos Tanto en el conjunto A como el conjunto B otros ejemplos de relación puede ser entre personas y su edad o personas y sus miembros de familia  en estos casos solo puede relacionarse con una opción . 


Variables: es todo aquello que puede asumir diferentes valores,

Variable independiente:  es aquella propiedad de un fenomeno a la que se le va a evaluar  su capacidad para influir , incidir o afectar a otras variables.

Variable dependiente: es la caracteristica que aparece o cambia  cuando se aplica, suprime o modifica la variable independiente.

para ver el siguiente ejemplo vamos a subrayar el siguiente enunciado con su variable dependiente de color naranja y su variable independiente de verde.

ejemplo:

El salario de una persona depende de las   horas trabajadas.

entonces vemos que la variable independiente es las horas trabajadas  y la variable dependiente es el salario.  

Despeje de variables (ver videos)

Concepto de función:


En este caso encontramos que cada uno de los elementos del conjunto A esta relacionado con un solo conjunto del conjunto B.


veamos los siguientes ejemplos:

Ejemplo 1:

Ejemplo 2: 

y se cumple lo siguiente : 

  1. Todos los elementos del conjunto a se relacionaron con algún elemento del conjunto b o sea, no sobraron elementos en el conjunto a que también lo vamos a llamar  conjunto de salida.  como lo podemos ver en el ejemplo 1.
  2. contrario del conjunto a, notamos que existen elementos del  B que no fueron "seleccionados" por elementos del conjunto A. es decir, sobraron elementos en el conjunto B o conjunto de llegada. (como lo podemos ver en el ejemplo numero 2)

También lo podemos ver de la siguiente manera:
  1. Todo elemento del conjunto de partida (A) o DOMINIO  esta relacionado con un elemento en el conjunto de llegada CODOMINIO.
  2. No es posible que un elemento del conjunto de partida o dominio este asociado  con 2 o mas elementos del conjunto de llegada. 

Concepto de Preimagen y Ambito o Imagen : 

El conjunto A se le denomina Preimagen.

Al conjunto del B solo los elementos seleccionados se les va a llamar imagen  en este caso como podemos observar Mariana no es una imagen o ámbito  (para los elementos que sobran no se les da un nombre en especifico) pero para el caso de Inés, Carina y Cecilia este grupo se va a llamar Imagen o Ámbito.






  









Teoría de Conjuntos

Teoría de conjuntos:

Un conjunto se refiere a la colección de objetos, o elementos, los cuales no tienen un orden establecido. 




Los diagramas de Venn sirven para ilustrar las operaciónes de conjuntos ya que en ellos se contempla por completo la teoría de conjuntos.

Veremos una serie de videos con la explicación del tema por la youtuber matématica Julianalaprofe, la cuál incluye hasta las demostraciones con identidad:










Adiccionalmente podemos observar una tabla con las diferentes leyes que podemos aplicar en este tema.

Leyes de conjuntos:


Tomado de Introducción a la matemática discreta- Manuel Murillo Tsijli

Resultados y demostraciones:

Tomado de Introducción a la matemática para informática- Universidad Nacional de Costa Rica


Material de apoyo:
Introducción a la matemática discreta- Manuel Murillo Tsijli

Esta recopialción no pretende violar los derechos de autor y/o ofender a los autores respectivos.

Lógica Proposicional


Para entender el comportamiento de la lógica proposicional es importante conocer las conectivas lógicas, las cuales nos permiten designar un valor de verdad.

Una proposición es un enunciado al que se le puede asignar un valor de verdad sea este verdadero o falso.
Una proposición debe cumplir estos principios:

  • De identidad: Si una proposición es verdadera, siempre es verdadera.
  • De no-contradicción: Ninguna proposición puede ser falsa y verdadera simultáneamente
  • Del tercero excluido: Una proposición es falsa o verdadera.
Tablas de Verdad: Una tabla de verdad se utiliza para determinar el valor de verdad de un enunciado 
ya que estos pueden ser tautología cuando todas las proposiciones se cumplen, contradicción cuando ninguna se cumple y contingencia cuando se presentan los dos valores de verdad.

Negación:
Se contradice el valor de la proposición.








Conjunción 
"P y Q"  "P & Q" su valor de verdad es verdadero cuando ambas proposiciones son verdaderas en cualquier otro caso son falsas.










Disyunción
"P o Q " se cumple su valor de verdad cuando alguna de las dos proposicones tenga un valor de verdad,  verdadero.










Disyunción exclusiva
"P ó Q" su valor de verdad se cumple cuando se cumple una proposición o la otra pero no simultáneamente,









Implicación o condicional
Su valor de verdad es falso únicamente para el caso donde la primera proposición sea verdadera, y la segunda proposición sea falsa.










Doble implicación o doble condicional
Su valor de verdad es verdadero cuando ambas proposiciones son iguales en su valor.




















Leyes de Lógica 

Estas leyes tautológicas permiten llegar a una simplificación de una proposición.
Estas evitan realizar tablas de verdad amplias, lo cual ahorra tiempo, al simplificar notaciones.

Implicación y  disyunción (ID)   P → Q ≡ ¬P ∨ Q

Contrapositiva                             P → Q ≡ ¬Q→ ¬P

Doble negación (DN)                  ¬¬P ≡ P

De Morgan (DM)                        ¬(P ∨ Q) ≡ ¬P ∧¬Q
                                                    ¬(P ∧ Q) ≡ ¬P ∨¬Q

Conmutativa (Con.)                    P ∨ Q ≡ Q ∨ P
                                                    P ∧ Q ≡ Q ∧ P

Asociativa (Aso.)                       (P ∨ Q) ∨ R ≡ P ∨ (Q ∨ R)
                                                   (P ∧ Q) ∧ R ≡ P ∧ (Q ∧ R)

Distributiva (Dis.)                      P ∨ (Q ∧ R) ≡ (P ∨ Q) ∧ (P ∨ R)
                                                   P ∧ (Q ∨ R) ≡ (P ∧ Q) ∨ (P ∧ R)

Idempotencia (Ide.)                    P ∧ P ≡ P
                                                    P ∨ P ≡ P

Neutro (Ne.)                               P ∨ F0 ≡ P
                                                   P ∧ V0 ≡ P

Inversos (Inv.)                           P ∨¬P ≡ V0
                                                  P ∧¬P ≡ F0

Dominación (Dom.)                 P ∧ F0 ≡ F0
                                                 P ∨ V0 ≡ V0

Absorción (Abs.)                     P ∨ (P ∧ Q) ≡ P
                                                 P ∧ (P ∨ Q) ≡ P

Exportación (Exp.)                  P → (Q → R) ≡ (P ∧ Q) → R



Inferencias Lógicas 

La inferencia es la relación entre las premisas y la conclusión de un argumento o razonamiento.



 
Cuantificadores Lógicos 




Aplicaciones Recomendadas
Calculadora Lógica- Play Store

Referencia bibliográfica:
Introducción a la matemática discreta- Manuel Murillo Tsijli