martes, 19 de diciembre de 2017

CONCEPTOS BÁSICOS DE PROGRAMACIÓN ORIENTADA A OBJETOS (P.O.O.)

ELEMENTOS
¿Qué es POO?
Programación orientada a objetos, es un paradigma de programación que usa los objetos en sus interacciones para diseñar aplicaciones informáticas.
¿Qué es Objeto?
Es un ente abstracto usado en programación que permite separar los componentes de un programa, simplificando su elaboración, depuración y posteriores mejoras.
¿Qué es una Clase?
Es un modelo que define un conjunto de propiedades y comportamientos de un tipo de objeto en concreto.
¿Qué es Instancia?
Es la creación de un objeto a partir de las definiciones de una clase.
¿Qué es Método?
Es una subrutina cuyo código es definido en una clase, son sentencias para llevar a cabo una acción.
¿Qué es Evento?
Es un suceso o una acción que se desencadena cuando el usuario interactúa con el objeto, como ubicar el puntero, dar clic, o presionar teclas, etc.
¿Qué es Mensaje?
Es la comunicación dirigida a un objeto, que ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.
¿Qué son atributos?
Es una especificación que define las propiedades de un objeto y cuyo valor puede ser alterado por la ejecución de un método.  
¿Qué es Estado?
El estado de un objeto abarca todas las propiedades de un objeto y los valores de cada una de esas propiedades.

CARACTERÍSTICAS
¿Qué es Abstracción?
Consiste en aislar un elemento de su contexto o del resto de elementos que lo acompañan. La abstracción expresa las características esenciales del objeto.
¿Qué es Encapsulamiento?
Se refiere al ocultamiento del estado de los datos miembros de un objeto que solo pueda cambiar mediante las operaciones definidas para el mismo.
¿Qué es Principio de Ocultación?
Se refiere a que los atributos privados de un objeto no pueden ser modificados a no ser que sea por el paso de un mensaje o invocación de un método. 
¿Qué es Herencia?
Propiedad que permite que los objetos sean creados a partir de otros obteniendo sus características y atributos.
¿Qué es Polimorfismo?
Se refiere a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos. Los objetos que deben saber responder al mensaje que se les envía.
¿Qué es Constructor?
Es una subrutina cuya misión es inicializar un objeto de una clase. En el constructor se asignan los valores iniciales del nuevo objeto.
¿Qué es Destructor?
Es una función miembro que permite liberar los recursos computacionales que el objeto de dicha clase haya adquirido en su tiempo de ejecución.


martes, 17 de octubre de 2017

ESTRUCTURA DINÁMICA NO LINEAL - GRAFOS

Un Grafo es básicamente un objeto geométrico aunque sea un objeto combinatorio, es decir, un conjunto de puntos y un conjunto de líneas tomado de entre el conjunto de líneas que une cada par de vértices.

Los grafos son estructuras de datos no lineales que tienen una naturaleza dinámica. Su estudio podría dividirse en dos grandes bloques:

GRAFOS DIRIGIDOS: Los arcos en el grafo tienen una dirección asociada. El primer elemento del arco es el origen y el segundo es considerado el destino.


GRAFOS NO DIRIGIDOS (pueden ser considerados un caso particular de los anteriores): Los arcos en el grafo no tienen una dirección particular, es decir, son bidireccionales.


Un grafo es una estructura de datos que almacena datos de dos tipos:
Vértices o nodos, con un valor almacenado.
Aristas o arcos: cada una conecta a un vértice con otro, y puede tener un valor almacenado. Una arista es un par de vértices (x, y). Si el par está ordenado, se dice que el grafo es dirigido o que es un dígrafo.

El conjunto de nodos o vértices es {A, B, C, D, F, G, H} y
El conjunto de arcos o aristas es {(A, B), (A, D), (A, C), (C, D), (C, F), (E, G), (A, A)} para el siguiente grafo:


Matriz de adyacencia:
La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias.

Construcción de la matriz a partir de un grafo
-          Se crea una matriz cero, cuyas columnas y filas representan los nodos del grafo.

-     Por cada arista que une a dos nodos, se suma 1 al valor que hay actualmente en la ubicación correspondiente de la matriz.


viernes, 29 de septiembre de 2017

ESTRUCTURA DE DATOS NO LINEALES: ÁRBOLES

ÁRBOLES

 Los árboles son estructuras de datos dinámicas no lineales. Un árbol se define como una colección de nodos donde cada uno además de almacenar información, guarda las direcciones de sus sucesores.  

PARTES DE UN ÁRBOL

Hijo: Es aquel nodo que siempre va a tener un nodo antecesor o padre, son aquellos que se encuentran en el mismo nivel 
Padre: Es aquel que tiene hijos y también puede tener o no antecesores. 
Hermano: Dos nodos son hermanos si son apuntados por el mismo nodo, es decir si tienen el mismo padre. 
Raíz: Es el nodo principal de un árbol y no tiene antecesores. 
Hoja o terminal: Son aquellos nodos que no tienen hijos o también los nodos finales de un árbol.
Interior: Se dice que un nodo es interior si no es raíz ni hoja. 
Nivel de un nodo: Se dice que el nivel de un nodo es el número de arcos que deben ser recorridos, partiendo de la raíz para llegar hasta él.
Altura del árbol: Se dice que la altura de un árbol es el máximo de los niveles considerando todos sus nodos.  
Grado de un nodo: se dice que el grado de un nodo es el número de hijos que tiene dicho nodo.  

TIPOS DE ÁRBOLES
* Binario: Son arboles donde cada nodo solo puede apuntar a dos nodos.
* Arboles B (Multicamino) : Arboles cuyos nodos pueden tener un número múltiple de hijos.

Árbol Binario















RECORRIDOS DEL ÁRBOL BINARIO
Comparado a las estructuras de datos lineales como las listas enlazadas  y arreglos unidimensionales, que tienen un método de acceso, las estructuras arborescentes pueden ser recorridas de muchas maneras diferentes. 
Recorrido en profundidad
Preorden: (raíz, izquierdo, derecho). Para recorrer un árbol binario no vacío en preorden, hay que realizar las siguientes operaciones recursivamente en cada nodo, comenzando con el nodo de raíz:
1.   Visite la raíz
2.   Atraviese el sub-árbol izquierdo
3.   Atraviese el sub-árbol derecho

Inorden: (izquierdo, raíz, derecho). Para recorrer un árbol binario no vacío en inorden (simétrico), hay que realizar las siguientes operaciones recursivamente en cada nodo:
1.   Atraviese el sub-árbol izquierdo
2.   Visite la raíz
3.   Atraviese el sub-árbol derecho
Postorden: (izquierdo, derecho, raíz). Para recorrer un árbol binario no vacío en postorden, hay que realizar las siguientes operaciones recursivamente en cada nodo:
1.   Atraviese el sub-árbol izquierdo
2.   Atraviese el sub-árbol derecho
3.   Visite la raíz
Recorrido en anchura
Los árboles también pueden ser recorridos en orden por nivel (de nivel en nivel), donde visitamos cada nodo en un nivel antes de ir a un nivel inferior. Esto también es llamado recorrido en anchura.
Ejemplo:
Profundidad
Secuencia de recorrido de preorden: F, B, A, D, C, E, G, I, H (raíz, izquierda, derecha)
Secuencia de recorrido de inorden: A, B, C, D, E, F, G, H, I (izquierda, raíz, derecha); note cómo esto produce una secuencia ordenada
Secuencia de recorrido de postorden: A, C, E, D, B, H, I, G, F (izquierda, derecha, raíz)
Anchura

Secuencia de recorrido de orden por nivel: F, B, G, A, D, I, C, E, H

lunes, 28 de agosto de 2017

ESTRUCTURA DE DATOS – ESTRUCTURAS ESTÁTICAS Y DINÁMICAS

ESTRUCTURA DE DATOS
La información que se procesa en la computadora es un conjunto de datos, que pueden ser simples o estructurados.
Los datos simples son aquellos que ocupan sólo un localidad de memoria, mientras que los estructurados son un conjunto de casillas de memoria a las cuales hacemos referencia mediante un identificador único.
Las estructuras de datos son una colección de datos cuya organización se caracteriza por las funciones de acceso que se usan para almacenar y acceder a elementos individuales de datos.
Una estructura de datos se caracteriza por lo siguiente:
· Pueden descomponerse en los elementos que la forman.
· La manera en que se colocan los elementos dentro de la estructura afectará la forma en que se realicen los accesos a cada elemento.
· La colocación de los elementos y la manera en que se accede a ellos puede ser encapsulada.

ESTRUCTURA DE DATOS ESTÁTICAS:
Son aquellas en las que el tamaño ocupado en memoria se define antes de que el programa se ejecute y no puede modificarse dicho tamaño durante la ejecución del programa.
Estas estructuras están implementadas en casi todos los lenguajes. Su principal característica es que ocupan solo una casilla de memoria, por lo tanto una variable simple hace referencia a un único valor a la vez. 

ESTRUCTURA DE DATOS DINÁMICAS:
No tienen las limitaciones o restricciones en el tamaño de memoria ocupada que son propias de las estructuras estáticas. Mediante el uso de un tipo de datos especifico, denominado puntero, es posible construir estructuras de datos dinámicas que no son soportadas por la mayoría de los lenguajes, pero que en aquellos que si tienen estas características ofrecen soluciones eficaces y efectivas en la solución de problemas complejos.
Se caracteriza por el hecho de que con un nombre se hace referencia a un grupo de casillas de memoria. Es decir un dato estructurado tiene varios componentes.

CLASIFICACIÓN DE LAS ESTRUCTURAS DE DATOS:

ESTRUCTURAS DE DATOS ESTÁTICAS
1.- Simples o primitivas
a) Boolean
b) Char
c) Integer
d) Real
e) Subrangos

2.- Compuestas
a) Arreglos - Arrays
b) Conjuntos o estructuras
c) Strings o cadenas
d) Registros - Campos
e) Archivos
f) Punteros

ESTRUCTURA DE DATOS DINÁMICAS
1.- Lineales
a) Pila
b) Cola
c) Lista

2.- No lineales
a) Árboles
b) Grafos

lunes, 7 de agosto de 2017

Solución del Cubo Rubik

Este método consiste en resolver el cubo de Rubik por capas, primero la superior, luego la central, y por último la inferior. Con un poco de práctica el cubo de Rubik se puede armar en menos de 2 minutos , y con mucha práctica incluso se pueden bajar los tiempos. Para conseguir buenos tiempos, hace falta un cubo de Rubik semiprofesional.
Dividimos la solución en 7 pasos:

Paso 1: Cruz superior

Este es el paso más sencillo, solo tenemos que crear una cruz en la cara superior de nuestro cubo de Rubik, de forma que los colores también coincidan en las capas anexas. Observar que el color de cada cara lo va a fijar el centro de esta.


Paso 2: Completar la capa superior

Para terminar la primera capa de nuestro cubo de Rubik, basta con colocar los cuatro vértices superiores en su sitio.

Paso 3: Completar la segunda capa

Para completar la segunda capa solo tenemos que colocar en su sitio las 4 aristas (piezas con 2 pegatinas) de esta. Este paso es un poco más difícil de deducir.
Algoritmo para aplicar: 

Paso 4: Cruz en la última cara

Para atacar mejor la última capa, giremos todo el cubo. Ahora lo que debemos hacer es que en la última cara quede dibujada una cruz. A diferencia del Paso 1, ahora solo nos centramos en lo que es la cara, dándonos igual las caras anexas. 
Algoritmo para aplicar:



Paso 5: Extender la cruz a la última capa

Ahora sí que nos vamos a preocupar por las caras anexas. Por ello vamos a hacer que la cruz que formamos en el paso anterior tenga sus colores laterales coincidiendo con las caras anexas.
Algoritmo para aplicar: 

Paso 6: Colocar los últimos vértices (sin orientar)

Este paso consiste en colocar los vértices de la última capa en su sitio aunque posiblemente queden giradas (ver dibujo). En nuestro dibujo se ve que cada esquina está en su sitio aunque dos de ellas necesitan un giro para que estén correctamente situadas.
Algoritmo para aplicar:

Paso 7: Terminar el cubo

¡Por fin!, ¡la última etapa!. No cantéis victoria, solo queda un paso pero este es el realmente complicado. Tenemos que girar las esquinas para completar el cubo de Rubik. Mucho cuidado con este paso y aplicar bien los códigos que puede fastidiarse todo el cubo y entonces tendríais que empezar de nuevo. 
Algoritmo para aplicar:

Carlos Angosto Hernandez. (2013). Solución sencilla del cubo de Rubik [Post] El cubo de rubik de la A a la Z [Portal web] recuperado de http://www.rubikaz.com/resolucion.php 

martes, 4 de julio de 2017

SISTEMAS DE NUMERACIÓN


·       Sistema Binarios:
Es el sistema de numeración que utiliza internamente hardware de las computadoras actuales. Se basa en la representación de cantidades utilizando los dígitos 1 y 0, por tanto su base es dos (número de dígitos de sistemas). Cada dígito de un número representado en este sistema se representa en BIT (contracción de binary digit).

Suma Binaria: Es semejante a la suma decimal, con la diferencia de que se manejan solo dos dígitos (0 y 1), y que cuando el resultado excede de los símbolos utilizados se agrega el exceso (acarreo) a la suma parcial siguiente hacia la izquierda. Las tablas de sumar son:

Tabla del 0 Tabla del 1
0 + 0 = 0 1 + 0 = 1
0 + 1 = 1 1 + 1 =10 (0 con acarreo 1)

Ejemplo: Sumar los números binarios 100100 (36) y 10010 (18)
                                                               1 0 0 1 0 0………………………36
                                                                  1 0 0 1 0…………………….+ 18
                                                               1 1 0 1 1 0………………………54

Observe que no hemos tenido ningún acarreo en las sumas parciales.
Ejemplo: Sumar 11001 (25) y 10011 (19)

Resta Binaria: Es similar a la decimal, con la diferencia de que se manejan solo dos dígitos y teniendo en cuenta que al realizar las restas parciales entre dos dígitos de idéntica posiciones, una del minuendo y otra del sustraendo, si el segundo excede al segundo, se sustraes una unidad del digito de más a la izquierda en el minuendo (si existe y vale 1), convirtiéndose este último en 0 y equivaliendo la unidad extraída a 1*2 en el minuendo de resta parcial que estamos realizando. Si es cero el digito siguiente a la izquierda, se busca en los sucesivos. Las tablas de Resta son:


Tabla del 0 Tabla del 1
0 - 0 = 0         1 - 0 = 1
0 - 1 = no cabe 1 - 1 = 0

Ejemplo:
  1 1 1 1 1 1
- 1 0 1 0 1 0
  0 1 0 1 0 1

Multiplicación binaria: Se realiza similar a la multiplicación decimal salvo que la suma final de los productos se hacen en binarios. Las tableas de Multiplicar son:

Tabla del cero (0) Tabla del uno (1)
0 * 0 = 0 1 * 0 = 0
0 * 1 = 0 1 * 1 = 1

Ejemplo:
Sistema Octal: Es sistema de numeración cuya base es 8 , es decir, utiliza 8 símbolos para la representación de cantidades . Estos sistemas es de los llamados posiciónales y la posición de sus cifras se mide con la relación a la coma decimal que en caso de no aparecer se supone implícitamente a la derecha del número. Estos símbolos son:  0 1 2 3 4 5 6 7
·         Sistema Decimal: Es uno de los sistema denominado posiciónales, utilizando un conjunto de símbolos cuyo significado depende fundamentalmente de su posición relativa al símbolo, denominado coma (,) decimal que en caso de ausencia se supone colocada a la derecha. Utiliza como base el 10, que corresponde al número del símbolo que comprende para la representación de cantidades; estos símbolos son:  0 1 2 3 4 5 6 7 8 9

·         Sistema Hexadecimal: Es un sistema posicional de numeración en el que su base es 16, por tanto, utilizara 16 símbolos para la representación de cantidades. Estos símbolos son:  0 1 2 3 4 5 6 7 8 9 A B C D E F

SÍMBOLOS
VALOR
ABSOLUTO
A
10
B
11
C
12
D
13
E
14
F
15

Márquez K., Silva F. (diciembre de 2005). Sistemas de numeración [Post] Monografias.com [Portal web] recuperado de http://www.monografias.com/trabajos28/sistemas-numeracion/sistemas-numeracion.shtml#sistema#ixzz4lvFvTkjE

lunes, 29 de mayo de 2017

CALIDAD DE LOS PROGRAMAS

Calidad
Es la aptitud de un producto o servicio para satisfacer las necesidades del usuario.
Es la cualidad de todos los productos, no solamente de equipos sino también de programas.
En el desarrollo de software, la calidad de diseño acompaña a la calidad de los requisitos, especificaciones y diseño del sistema.

Calidad del Software.- son características propias del software aquellas que se quiere controlar y asegurar, el software es un producto inmaterial que no se fabrica, tampoco se degradan físicamente, sino que se desarrolla. El software puede tener errores, incidencias pero no son similares a lo que cualquier equipo de carácter físico.

Las características generales que debe reunir un programa, se definen en los siguientes factores:
Legibilidad: debe ser claro y sencillo, de tal forma que facilite su lectura y comprensión.
Fiabilidad: debe ser capaz de recuperarse frente a errores y usos inadecuados.
Portabilidad: su diseño debe permitir codificar en diferentes lenguajes de programación, así como la instalación en diversos sistemas operativos.
Modificabilidad: debe facilitar el mantenimiento, modificaciones y actualizaciones para adaptarlo a una nueva situación.
Eficiencia: se debe aprovechar los recursos todo el equipo, ahorrando uso de la memoria y el tiempo de proceso o ejecución.