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

 

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.

miércoles, 29 de agosto de 2012

PREGUNTAS (INTRODUCCIÓN A LA PROGRAMACIÓN)


1.- ¿Cuales son los seis pasos para la resolución de un problema?

·      Identificar el problema.
·         Entender el problema.
·         Identificar las rutas alternativas para resolver el problema.
·         Seleccionar la mejor opción o forma de resolver el problema.
·         Hacer una lista de las opciones que te ayuden a resolver el problema.
·         Evaluar la solución.

2.- ¿Cual es la solución algorítmica del problema?

·         Se resuelven con varias acciones definidas.

3.- Menciona tres problemas actuales en tu vida que podrían ser resueltos atreves de un proceso algorítmico.
Explica por qué cada uno de estos problemas es de naturaleza algorítmica.

·        Registrarme en una página web de vídeo juegos.
 Esta solución es algorítmica ya que para poder registrarnos en la página es necesario seguir instrucciones específicas para poder realizar el registro con éxito.

·       Terminar un videojuego.
Esto es debido a que para poder terminar un videojuego en la mayoría de los casos es necesario seguir instrucciones, las cuales son necesarias realizar para poder seguir avanzando en el videojuego.

·        Solicitar un crédito.
 Este problema lo justifico porque al realizar el trámite se tienen que seguir pasos rigurosos para poder verificar nuestro historial el cual nos dirá si nos darán el crédito o no.

4.- ¿Cual es la solución heurística de un problema?

·       Son soluciones que cuentan con prueba y error y tienen como riesgo que el resultado sea positivo o negativo, en pocas palabras puede funcionar o no.
 
5.- ¿Menciona tres problemas actuales en su vida que podría ser resuelto a través de un enfoque heurístico?
Explica por qué cada uno de estos problemas es de naturaleza heurística.

·       Invertir en un negocio.
Esto es heurístico debido a que hay un riesgo al invertir en un negocio ya que al hacerlo puede generarte ganancias o pérdidas no tiene nada seguro.
·       Cocinar por primera vez.
Este problema lo pongo debido a que al cocinar por primera vez hay posibilidad de que lo cocinado nos salga delicioso o realmente incomestible.
·       Casarse.
Esto es algo muy común actualmente  ya que al hacerlo no tenemos asegurada la felicidad así como podemos ser felices tenemos el riesgo de que fracase el matrimonio aquí es cuando se aplica lo de prueba y error.

6.- Nombrar tres problemas actuales en su vida que pueda surgir en la casa, en la escuela o en un negocio que podría ser resuelto de manera más eficiente con ayuda de la computadora. ¿Estos problemas requieren una solución algorítmica o heurística? ¿Por qué?

·       Realizar un cobro de mercancía a gran escala.(Negocio)
Esta solución es algorítmica debido a que para realizar el cobro se tienen que seguir unos pasos rigurosos para que el cobro sea efectivo y rápido.
·       Buscar un producto en inventario.(Negocio)
Esta solución es algorítmica debido a que al buscar un producto tenemos que realizar ciertos pasos para que la búsqueda sea efectiva y rápida.
·       Buscar la dirección de algún lugar.(Casa)
Esta solución es heurística debido a que al buscar la  dirección del lugar tenemos la posibilidad de encontrarla o simplemente no hallarla.

7.- Indica una razón por qué cada uno de los seis pasos para resolver  problemas es  importante para desarrollar la mejor solución para un problema.
Da una razón para cada uno de los pasos.

·       Identificar el problema.

Este paso es importante debido a que si no lo hacemos no sabremos cual es el problema y no podremos continuar solucionando el problema debido a que no sabemos cuál es.

·        Entender el problema.

Este paso ayuda a entender el problema que es lo que está involucrado sea persona o un objeto. Este paso nos dará la pauta para poder resolver el problema.

·        Identificar las rutas alternativas para resolver el problema.

Aquí daremos las opciones que tenemos y las investigaremos para saber cuál es la más elegible de todas.

·       Seleccionar la mejor opción o forma de resolver el problema.

Este paso es importante porque aquí se verán las diferentes formas de solucionar el problema y se elegirá el más adecuado para la solución.

·       Hacer una lista de las opciones que te ayuden a resolver el problema.

Este paso es básico debido que aquí se darán los pasos a seguir para solucionar el problema ya que si los pasos están mal el resultado sería negativo.

·        Evaluar la solución.

Este paso es importante debido a que siempre el resultado debe ser positivo de lo contrario sabríamos que estamos mal en alguno de los pasos anteriores.