sábado, 1 de diciembre de 2012

Herencia

Es una propiedad que permite que los objetos sean creados a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes. Es la relación entre una clase general y otra clase mas especifica.
 Es un mecanismo que nos permite crear clases derivadas a partir de clase base, Nos permite compartir automáticamente métodos y datos entre clases subclases y objetos. 


Esto es la forma en que se hereda de la clase padre a las hijas.
A continuación un ejemplo claro:



Polimorfismo, UML y Clases

Polimorfismo

es la habilidad que adquieren los objetos de responder en forma diferente al mismo lenguaje. Es decir, el mismo mensaje que se envia a muchos tipos de objetos, toma "muchas formas" y de ahi viene el termino polimorfismo.

UML

Es un lenguaje para visualizar, especificar, construir, y  documentar los artefactos de un sistema.

Se usa para entender, diseñar, configurar, mantener, y controlar la información sobre los sistemas a construir. Para realizar un proyecto debemos antes realizar un esquema del mismo.

Clase

Representa un conjunto de objetos que comparten los mismos atributos, operaciones, relaciones y semantica.

Forma de hacer una clase.

A continuación se mostrara un ejemplo de una clase.


Relación entre clases

Relación de asociación

  • Indica que  dos clases o mas se conectan entre si de forma conceptual.
  • la asociación puede funcionar de forma inversa.
  • Algunas veces una asociación debe seguir algunas reglas.

Relación de dependencia

  • Implica dependencia entre clases.
  • Se denota mediante una linea punteada.
  • La flecha es dirigida hacia la clase usada.
  • La clase debe ser publica.

Relación de agregacion

  • Es común que un objeto contenga objetos de otras clases, tal cosa se llama "AGREGACION"
  • La relación que se establece entre estos objetos se llama "Tiene-un", "Es parte de", "Consta de".

Relación de composición

  • Es parecida a la de agregación solo que al lugar de "tiene-un" es "mas fuerte".

Presentación POO y UML

Programación Orientada a Objetos (POO)

El paradigma orientado a objetos nacio enn 1969 de la mano del Dr. Kristin Nygaard.
  • se organiza el software como una coleccion de objetos discretos que encapsulan estructuras de datos y comportamiento.
  • un sistema OO funciona mediante la colaboración entre los objetos que se comunican entre si.

Encapsulación


Un principio de la POO es la ocultación de información  que es el proceso de ocultar dentro de si mismo, todos los "secretos" de un objeto que no contribuyen a sus características esenciales.

Al encapsular los datos del objeto, se maximiza la reutilizabilidad, se reduce la dependencia de los datos y se minimiza el tiempo de depuración.

La Encapsulación esconde la complejidad de las cosas.

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