jueves, 30 de junio de 2011

Interfaces (Puntos Extras)

¿Primero que nada que es una interfaz?
Una interfaz en JAVA se define como una colección de métodos abstractos y propiedades. En ellas se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.

En el lenguaje de programación de JAVA, una interfaz es un conjunto de requisitos que deben satisfacer las clases que se ajusten a esa interfaz, además de que las interfaces no se pueden instanciar haciendo así que sus métodos deban ser re-escritos por la clase que lo implemente. Otro aspecto importante de las interfaces en JAVA es que todos los métodos son automáticamente public entonces no es necesario declararlo. Para hacer que una clase implemente a una interfaz, se dan dos pasos:

1. Se declara que la clase tiene intención de implementar la interfaz dada.
2. Se proporcionan definiciones para todos los métodos de la interfaz

El aspecto que tiene una interfaz Comparable es el siguiente en JAVA

Ejemplo.

Public interface Comparable
{
Int compareTo(Object otro);
}

Fuentes:
Horstmann,Cays.S. Core Java 2 Volumen 1-Fundamentos, Pearson Prentice Hall
http://emartini.wordpress.com/2008/09/17/poo-clases-abstractas-interfaces-y-herencia-multiple/

Ejercicio Clases y Casos De Uso

Identificar las Clases, Atributos y Métodos para lo siguiente:
-iTunes
-SIASE
-Angry Birds

Itunes


SIASE


AngryBirds


Casos de Uso

Buscaminas

Descripción:
Encontrar todas las minas lo antes posible sin descubrir ninguna.

martes, 28 de junio de 2011

Herramientas de Trabajo

Las herramientas de trabajo que utilizare para poder trabajar con mi proyecto serán
• Ubuntu(USB)
• JDK(java)
Aquí les mostrare paso a paso como crear el USB para poder usarlo en cualquier computadora y así poder transportar nuestro sistema operativo junto con nuestros archivos a cualquier lado.
Primero que nada ingresamos a la página de Ubuntu directamente a la sección de descargas
http://www.ubuntu.com/download/ubuntu/download
El primer paso sería descargar el .iso que es el paso número 1 como se muestra en la pagina

Después Nos vamos a la sección numero 2

Elegimos la opción de USB y en el sistema operativo que lo crearemos en este caso yo estoy usando Windows. Seguimos los pasos que se nos mencionan en la pagina al presionar “Show me how” que básicamente son descargar el “Universal USB Installer” de la pagina: http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/

Al terminar la descarga abrimos el “Universal-USB-Installer-1.8.5.6.exe”

Elegimos la última versión de Ubuntu o alguna otra que se desee instalar Después elegimos el .iso previamente descargado. Y le damos crear y comenzara a crearnos nuestro USB con Ubuntu

Una vez terminado este proceso ya tenemos listo nuestro USB y ya lo podemos usar siempre y cuando nuestro equipo tenga la opción de poder hacer boot desde el puerto USB sino se entraría al BIOS y se modificarían las opciones de booteo

Para el JDK ingresamos a ubuntu y para hacerlo mas sencillo vamos a el software center y descargamos como se muestra en la imagen el developerkit(JDK)

Ya por ultimo mostramos la version que se instalo


Tambien utilisare mysql para la base de datos lo podemos optener de la siguiente forma
Escribiendo lo siguiente en la terminal:

sudo apt-get install mysql-server, admin - sudo apt-get install mysql-admin


Primera Clase Costos que servira en mi trabajo para el manejo de precios.

class Costo {

private float Cargos;


public Costo () { };


private void setCargos ( float newVar ) {
Cargos = newVar;
}//Fin setCargos

private float getCargos ( ) {
return Cargos;
}//Fin getCargos


protected float SumaTotal( )
{
}//Fin SumaTotal

}//Fin Clase Costo


Para Mas informacion pueden consultar las referencias.

Referencias:
http://www.guia-ubuntu.org/index.php?title=MySQL
http://www.ubuntu.com/

(Puntos Extras) Casos de sistemas fallidos

Aunque no lo creamos muchos de los grandes proyectos de las grandes empresas creadoras de software alrededor de mundo han tenido algún caso de algún sistema fallido. En un artículo que encontré se menciona un ejemplo de 3 de los casos a nivel mundial más recordados de sistemas fallidos el articulo menciona que incluso las más grandes compañías o empresas sin darse cuenta al momento de estar trabajando en algún proyecto que se les haya solicitado se pueden topar sin haberlo previsto antes con un gran obstáculo irreparable lo cual les causa una gran pérdida de dinero a la compañía, el articulo también menciona que a veces las causas iníciales son tan menores que es imposible creer que el efecto final sea tan grande. Después de una breve explicación nos presenta uno de los 3 mencionados casos el cual sucedió en el reino unido en donde se trato de implementar un sistema de salud electrónico nacional el problema fue que el gobierno tenía presupuestado que el proyecto costaría alrededor de 29 mil millones de dólares y al final termino costando 55mil millones una diferencia de 26 millones que no estaba presupuestada.
Bueno les dejo el link al blog donde encontré el artículo por si les interesa leerlo completamente.

Articulo

Un caso del que tal vez algunos no estén enterados y sucedió en estas fechas que creo que se puede considerar también como un caso de sistema fallido es el sistema de seguridad con el que contaba anteriormente la compañía SONY la cual fue hackeada por un grupo muy conocido llamado “Lulz Security”. La plataforma PlayStation Network que es usada por toda la gente que cuenta con un PlayStation 3 fue atacada por el grupo obteniendo información de los usuarios muy importantes tales como datos personales y tarjetas de créditos causando pérdidas millonarias para la compañía SONY y dejando a miles de sus usuarios inconformes actualmente se que ya a sido restaurada la plataforma pero también me entere de que Sony Pictures también fue atacada por el mismo grupo. Si les interesa mas información sobre lo de SONY pueden buscar y encontrar muchos artículos fácilmente esto solo fue de lo que yo estaba enterado por que fue algo muy sonado.


Referencias:
http://semaforoverde.wordpress.com/2007/12/07/proyectos-fallidos-it-parte-2-sistema-de-salud-de-reino-unido/

lunes, 27 de junio de 2011

Primera Actividad(Definicion de Proyecto)

La idea que tengo para el trabajo a realizar consiste en tratar de implementar un sistema para un hotel. Como ya sabemos cuando llegamos a un hotel se tiene un sistema en el cual se lleva el registro de las habitaciones para que no se asigne una habitación ya ocupada además de que proporcionamos nuestros datos con lo que se nos asigna una habitación la cual queda registrada en el sistema además de otra información como: la habitación en la que nos encontramos hospedados, nuestros datos personales, la cantidad de gente que la esté usando, o en general todo este tipo de información queda almacenada en la base de datos que tiene el sistema del hotel para poder disponer de ella en cualquier momento que sea requerida. Entonces el programa que yo intentare realizar consistirá más o menos en lo mismo que usa un hotel tratare de incluir lo que sería el control de entradas y de las salidas con sus respectivas fechas para que no se asignen habitaciones que estén ocupadas, los cargos con sus cargos extras dependiendo de algún servicio extra que se solicito, facturación y su base de datos para almacenar la información todo esto con una interfaz grafica y tal vez también algún tipo de cuentas para los empleados del hotel que llevan el control del programa.

Bueno esta sería la idea general del proyecto que pretendo realizar espero poder cumplir con todos los aspectos que mencione aquí y seria realizado en el lenguaje JAVA.

martes, 18 de mayo de 2010

Proyecto 5

Descripción

En la Ciencia de la computación y teoría de los grafos, el Algoritmo de Edmonds-Karp es una implementación del Algoritmo de Ford-Fulkerson para la resolución del problema de flujo máximo en una red de flujo. La característica que lo distingue es que el camino de aumento más corto es usado en cada interacción, lo que garantiza que lo calculo va a terminar. En la mayoría de las implementaciones, el camino de aumento más corto es encontrado usando una búsqueda en anchura, la cual rueda un tiempo de Lo(VE2). Es decir asintóticamente más lento que algoritmo remarcagem-para-frente, el cual rueda en Lo(V3), pero es frecuentemente más rápido para utilización en grafos esparsos. El algoritmo fue publicado por primera vez por el científico ruso Dinic, en 1970, y después, de forma independiente, por Edmonds y Karp que lo publicaron en 1972. El algoritmo de Dinic incluye técnicas adicionales para reducir el tiempo para la orden de Lo(V2Y)

Problema que resuelve

Este algoritmo es idéntico al Algoritmo de Ford-Fulkerson, excepto que la orden de búsqueda cuando encuentra que el camino de aumento de flujo definido. El camino encontrado debe ser el camino más corto con capacidad disponible. Esto lo podemos encontrar por una primera búsqueda de amplitud dejando que los bordes sean la unidad de longitud. El tiempo de duración de O(|V|*|E|^2) se encuentra mostrando que cada trayectoria de aumento se puede encontrar en O(|E|)tiempo, y que a su vez al menos uno de los bordes de E se satura, la distancia desde un borde saturado a la fuente de la trayectoria de aumento debe ser más larga que la última vez que estaba saturado y la distancia es en la mayoría de V de largo.

Ejemplo

Dato una red de siete nudos, y capacidad como mostrado abajo:






En el pares f / c escritos en los arcos, f es el flujo actual, y c es la capacidad. La capacidad residual de u para v es cf(u,v) = c(u,v) − f(u,v), la capacidad total, menos la que ya está siendo usada. Si el flujo de la red de u para v es negativo, esto contribuye para capacidad residual.



Pseudocodigo

//Edmonds-Karp
//return the largest flow;flow[] will record every edge's flow
//n, the number of nodes in the graph;cap, the capacity
//O(VE^2)
#define N 100
#define inf 0x3f3f3f3f
int Edmonds_Karp(int n,int cap[][N],int source,int sink){
int flow[N][N];
int pre[N],que[N],d[N],p,q,t,i,j;
if (source==sink) return inf;
memset(flow,0,sizeof(flow));
while (true){
memset(pre,-1,sizeof(pre));
d[source]=inf;p=q=0,que[q++]=source;
while(p<0){ t="que[p++];" i="0;i
if (pre[i]<0&&(j=cap[t][i]-flow[t][i])) i="sink;i!=" i="pre[i])" j="i=">
return j;
}





Bibliografia
ww.cse.ohio-state.edu/~tamaldey/course/794/ek-algo.pdf
www.cs.umass.edu/~barring/cs611/lecture/11.pdf


domingo, 25 de abril de 2010

Proyecto 4(Listas simplemente enlazadas)

El proyecto 4 trato de listas enlazadas a nosotros nos toco las listas enlazadas las listas simplemente enlazadas.

Una lista lineal simplemente enlazada es una estructura en la que el cada elemento enlaza con el siguiente. El recorrido se inicia a partir de un puntero ubicado al comienzo de la lista. El último elemento (nodo) de la lista apunta a una dirección vacía que indica el fin de la estructura.


Cabe destacar que en una lista lineal enlazada, sólo es posible acceder a los elementos sucesores pero no antecesores, además, siempre es necesario mantener un puntero a la cabeza de la lista para acceder a los demás elementos

Mi colaboración en el trabajo fue en el código donde modifique un código ya hecho para ajustarlo a un ejemplo real donde podría ser utilizado en un hotel para el registro de sus huéspedes. Creo que me hace falta mejorar en algunos temas de la clase para así poder comprender mejor lo que se está haciendo, creo que me apoyo en mis compañeros de equipo pero a la vez si ellos necesitan ayuda en algo que yo comprendo los puedo apoyar.

Links a los blogs del equipo
http://cris-algoritmoscomputacionalesfime.blogspot.com/
http://pelon-algoriitmos.blogspot.com/
http://ati5.jimdo.com/