sábado, 1 de diciembre de 2012

Introducción a la Abstracción de Datos

Esta semana vimos lo que es POO (Programación Orientada a Objetos) y en lo que esta basada:


  • Abstracción
  • Encapsulación
  • Jerarquía
  • Clase
  • Objeto
  • Modularidad
  • Herencia
  • Polimorfismo
Y si alguno de estos falta no se considera POO.

Abstracción

es la capacidad Modelo de conceptualizar entidades genéricas de información a partir de cosas concretas.

Dos de los tipos mas importantes de abstracción son:
  • División en partes: Abstracción "Tiene-un"
  • División en especialización: "Es-un"
Modelo: Es una abstracción u objeto conceptual usado en la creación de una formula predecible a una solución.

Un modelo define una vista abstracta del problema, e enfoca solamente en aspectos relacionados.

Tipo de Dato Abstracto (TDA)


Es la representación de una entidad u objeto para facilitar su programación. Se compone de:

  • Estructura de datos: Es la estructura de la programación que se selecciona para representar las características de la entidad modelada.
  • Funciones de abstracción: Son funciones que permiten hacer uso de las estructuras de datos, y que esconden los detalles de dicha estructura, permitiendo un mayor nivel de abstracción.

Propiedades del TDA

  • Con abstracción creamos una entidad bien definida, la cual puede ser manejada.
  • estas entidades definen las estructuras de datos de un conjunto de items o elementos.
  • Las estructuras de datos solo pueden ser accedidas con operaciones bien definidas. Este conjunto de operaciones es llamada interface y es exportada por la entidad.
  • Una entidad con las propiedades descritas se llama Tipo de Dato Abstracto (TDA).

Especificación Lógica de un TDA


  1. Elementos que conforman la estructura de datos.
  2. Definición (TDA)
  • TDA se caracteriza por las siguientes propiedades:
  1. Define un tipo.
  2. define un conjunto de operaciones.
  3. Las operaciones de la interface son el único mecanismo de acceso a las estructuras de datos.
  4. Axiomas and precondicions definen el dominio de la aplicación del tipo.

TDA PILA(STACK)

  • TDA pila
  • Una pila es una estructura de datos que se caracteriza porque el ultimo elemento en entrar se el primero en salir.
  • Operaciones: obtener, agregar, borrar, esta vacia, etc.
  • FIFO(Primero entra, Primero sale)

Objetivos de los TDA

El fin que persigue el concepto de TDA es separar el uso del tipo de dato, de su implementación.
Se divide en dos partes:
  • Especificación
  • Implementación.
Tipo de organización en que se guardaran lo elementos:

  • Lineal: Relación uno a uno entre los elementos.
  • Jerárquica: Relación uno a muchos entre los elementos.
  • Red: Relación muchos a muchos entre los elementos.
  • Sin relación: Si no hay relación entre los elementos.


jueves, 1 de noviembre de 2012

Arreglos


Los arreglos (arrays) permiten almacenar vectores y matrices. Los arreglos unidimensionales
sirven para manejar vectores y los arreglos bidimensionales para matrices. Sin embargo, las matrices tambien se pueden almacenar mediante arreglos unidimensionales y por medio de apuntadores a apuntadores, temas que se veran en el capıtulo siguiente.
La palabra unidimensional no indica que se trata de vectores en espacios de dimensi´on uno; indica que su manejo se hace mediante un sub´ındice. El manejo de los arreglos bidimensionales se hace mediante dos subındices.


Los arreglos son una colección de variables del mismo tipo que se referencian utilizando un nombre común. Un arreglo consta de posiciones de memoria contigua. La dirección más baja corresponde al primer elemento y la más alta al último. Un arreglo puede tener una o varias dimensiones. Para acceder a un elemento en particular de un arreglo se usa un índice. 

Los arreglos (arrays) permiten almacenar vectores y matrices. Los arreglos unidimensionales sirven para manejar vectores y los arreglos bidimensionales para matrices. Sin embargo, las matrices tambien se pueden almacenar mediante arreglos unidimensionales y por medio de apuntadores a apuntadores, temas que se veran en el capıtulo siguiente. La palabra unidimensional no indica que se trata de vectores en espacios de dimensi´on uno; indica que su manejo se hace mediante un sub´ındice. El manejo de los arreglos bidimensionales se hace mediante dos subındices.

El formato para declarar un arreglo unidimensional es:

tipo nombre_arr [ tamaño ]

Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez elementos se hace de la siguiente forma:

int listanum[10];

En C, todos los arreglos usan cero como índice para el primer elemento. Por tanto, el ejemplo anterior declara un arreglo de enteros con diez elementos desde listanum[0] hasta listanum[9].
La forma como pueden ser accesados los elementos de un arreglo, es de la siguiente forma:

listanum[2] = 15; /* Asigna 15 al 3er elemento del arreglo listanum*/
num = listanum[2]; /* Asigna el contenido del 3er elemento a la variable num */

El lenguaje C no realiza comprobación de contornos en los arreglos. En el caso de que sobrepase el final durante una operación de asignación, entonces se asignarán valores a otra variable o a un trozo del código, esto es, si se dimensiona un arreglo de tamaño N, se puede referenciar el arreglo por encima de N sin provocar ningún mensaje de error en tiempo de compilación o ejecución, incluso aunque probablemente se provoque el fallo del programa. Como programador se es responsable de asegurar que todos los arreglos sean lo suficientemente grandes para guardar lo que pondrá en ellos el programa.
C permite arreglos con más de una dimensión , el formato general es:
tipo nombre_arr [ tam1 ][ tam2 ] ... [ tamN];
Por ejemplo un arreglo de enteros bidimensionales se escribirá como:

int tabladenums[50][50];

Observar que para declarar cada dimensión lleva sus propios paréntesis cuadrados.
Para acceder los elementos se procede de forma similar al ejemplo del arreglo unidimensional, esto es,

tabladenums[2][3] = 15; /* Asigna 15 al elemento de la 3ª fila y la 4ª columna*/
num = tabladenums[25][16];

A continuación se muestra un ejemplo que asigna al primer elemento de un arreglo bidimensional cero, al siguiente 1, y así sucesivamente.

main()
{
    int t,i,num[3][4];

    for(t=0; t<3; ++t)
        for(i=0; i<4; ++i)
            num[t][i]=(t*4)+i*1;

    for(t=0; t<3; ++t)
    {
        for(i=0; i<4; ++i)
            printf("num[%d][%d]=%d  ", t,i,num[t][i]);
        printf("\n");
    }

}
En C se permite la inicialización de arreglos, debiendo seguir el siguiente formato:
tipo nombre_arr[ tam1 ][ tam2 ] ... [ tamN] = {lista-valores};
Por ejemplo:
int i[10] = {1,2,3,4,5,6,7,8,9,10};
int num[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};


sábado, 20 de octubre de 2012

FUNCIONES

Bueno primero definiremos que es una función???

Una función es un conjunto de líneas de código que realizan una tarea específica y puede retornar un valor. Las funciones pueden tomar parámetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comúnmente utilizadas durante un programa y de esta manera reducir la cantidad de código. Cuando una función es invocada se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada.

El formato general de una función en C es 
especificador_de_tipo nombre_de_función( lista_de_parámetros )
{
variables locales
código de la función
}
 El especificador_de_tipo indica el tipo del valor que la función devolverá mediante el uso de return. El valor puede ser de cualquier tipo válido. Si no se específica un valor, entonces la computadora asume por defecto que la función devolverá un resultado entero. No se tienen siempre que incluir parámetros en una función. la lista de parámetros puede estar vacía. 

Las funciones terminan y regresan automáticamente al procedimiento que las llamó cuando se encuentra la última llave }, o bien, se puede forzar el regreso antes usando la sentencia return. Ademas del uso señalado la función return se usa para devolver un valor. 
Se examina a continuación un ejemplo que encuentra el promedio de dos enteros:

float encontprom(int num1, int num2)
{
    float promedio;
 
    promedio = (num1 + num2) / 2.0;
    return(promedio);
}

main()
{
    int a=7, b=10;
    float resultado;

    resultado = encontprom(a, b);
    printf("Promedio=%f\n",resultado);
}

lunes, 24 de septiembre de 2012

Semana 5

Esta semana seguimos viendo las ESTRUCTURAS DE CONTROL

Condicional IF
La condición es de 3 tipos:
  • Secuencia lógica
  • Lógica positiva
  • Lógica negativa
En la secuencia lógica las condiciones a evaluar son independientes, es decir, no son mutuamente excluyentes.


CICLOS

Un ciclo es una sentencia que se realiza repetidas veces en un código, hasta que dicha condición asignada al ciclo se deje de cumplir.
Generalmente un ciclo es utilizado para realizar una acción repetida sin tener que escribir varias veces el mismo código, lo que ahorra el tiempo, deja el código mas claro y facilita su modificación en un futuro.

Ejemplo de un CICLO FOR

acumulador=0;
for(contador=0;contador<=39;contador=contador+1)
{
     solicitar la edad;
     guardar en edad;
     acumulador=acumulador+edad;
}
promedio=acumulador/40;


Ejemplo de un Ciclo WHILE

contador=1;
while(contador<=5)
{
     solicitar edad;
     guardar en edad;
     acumulador=acumulador+edad;
     contador=contador+1;

}

Diagrama de flujo para el ciclo WHILE

 

lunes, 17 de septiembre de 2012

Semana 4

En esta semana empezamos a ver lo que son las pruebas de escritorio.

PRUEBAS DE ESCRITORIO

Siempre es necesario probar lo que hacemos y para ello requerimos datos para validar nuestras ecuaciones o expresiones.
Siempre es necesario hacer las pruebas de escritorio a nuestro programa para ver si tenemos o no errores y corregirlos.

También vimos lo que son los diagramas de flujo de datos:

Nombre
Símbolo
Función
Terminal
'Diagrama de flujo'
Representa el inicio y fin de un programa. También puede representar una parada o interrupción programada que sea necesaria realizar en un programa.
Entrada / salida
'Diagrama de flujo'
Cualquier tipo de introducción de datos en la memoria desde los periféricos o registro de información procesada en un periférico.
Proceso
'Diagrama de flujo'
Cualquier tipo de operación que pueda originar cambio de valor, formato o posición de la información almacenada en memoria, operaciones aritméticas, de transformaciones, etc.
Decisión
'Diagrama de flujo'
Indica operaciones lógicas o de comparación entre datos (normalmente dos) y en función del resultado de la misma determina (normalmente si y no) cual de los distintos caminos alternativos del programa se debe seguir
Conector Misma Página
'Diagrama de flujo'
Sirve para enlazar dos partes cualesquiera de un diagrama a través de un conector en la salida y otro conector en la entrada. Se refiere a la conexión en la misma pagina del diagrama
Indicador de dirección o línea de flujo
'Diagrama de flujo'
Indica el sentido de la ejecución de las operaciones
Salida
'Diagrama de flujo'
Se utiliza en ocasiones en lugar del símbolo de salida. El dibujo representa un pedazo de hoja. Es usado para mostrar datos o resultados.

estos son algunos símbolos y sus significados los cuales se utilizan en los diagramas.
Un ejemplo de estos diagramas es:




También vimos lo que son las estructuras de control.

ESTRUCTURAS DE CONTROL

  • Ejecución secuencial: Las sentencias se ejecutan una y otra vez.
  • Transferencia de control: La siguiente sentencia en ejecutarse no es la siguiente en secuencia.
  • keywords: Palabras reservadas por JAVA, no pueden ser utilizadas como identificadores o nombres de variables.


lunes, 10 de septiembre de 2012

Semana 3

En esta semana vimos los tipos de datos que podemos utilizar.

También vimos como resolver problemas de nuestro lenguaje y poder resolverlos y pasarlos
lenguaje de maquina.

Esto es muy importante ya que nos ayudara a resolver problemas en el futuro y así poder entenderlos, lo que básicamente hacemos aquí es que resolvemos los problemas de un modo que cualquiera, siguiendo instrucciones pueda resolver sin necesidad de preguntar a alguien.

También ya empezamos a ver como codificar los problemas dados dando su solución  en código.
Vimos algunas instrucciones las cuales nos ayudaran a tener mas ordenado el código y así sea mas entendible.
algunas de esas instrucciones son:


  • \n  La cual nos sirve para pasar al siguiente renglón.
  • \t   Nos da un espacio al tabulador.
  • \a   Emite un tic(sonido de maquina).
  • \"   Sirve para poner comillas dentro de un texto.


martes, 4 de septiembre de 2012

Semana 2

Esta es la segunda semana de clases y ya empezamos a ver un poco mas de la materia....
Empecemos....

La BÚSQUEDA EN CADENA se usa con el método find y su objetivo es buscar sub-cadenas en una cadena.
La búsqueda puede funcionar tomando un para metro adicional que indica la posición del indice de la cual queremos que empiece la búsqueda.

                          <string1>.find(<string>,<number>)

Las arañas web tienen como objetivo encontrar links en las paginas webs.

TIPOS DE DATOS

Pueden ser numéricos, de tipo carácter, lógicos u otros(fecha, estudiante).
Los numéricos pueden ser enteros(integer, int) o decimales(float, double).
Los de carácter son alfanuméricos(char, character, string), la mayoría de datos son de este tipo.
Los datos lógico boolean sirven para tomar decisiones de tipo si/no y algunos lenguajes aceptan T/F, Y/N.

ALMACENAMIENTO DE DATOS

Los datos que almacena la computadora se guardan en la memoria interna, el almacenamiento es temporal y cuando se deja de ejecutar el programa la información deja de existir.

PROCEDIMIENTOS/FUNCIONES

Funciones son un conjunto de instrucciones que ejecutan un conjunto finito de tareas y regresan un resultado.
Representan tareas que se ejecutan repetidamente.
Usarlo contribuye a:

       -Hacer programas mas cortos.
       -Aumenta la legibilidad de nuestro código.
       -Reducimos tiempo de trabajo


UML (Lenguaje Unificado de Modelado)

UML significa Unified Modeling Language o Lenguaje Unificado de Modelado.

Es un lenguaje que sirve para analizar y diseñar sistemas orientados a objetos ofrecido en un lenguaje común y consiste en diagramas e información textual.

 UML no es una metodología de desarrollo, sino que se puede utilizar con cualquier tipo de metodología ya que es independiente del ciclo de desarrollo.

UML sirve para modelar todo el  proceso de desarrollo de software dependiendo de los distintos dominios de trabajo.