miércoles, 30 de septiembre de 2009

Sistema de elevador

El funcionamiento de un elevador, modelado mediante UML.

Análisis



El elevador funciona conforme a n número de pisos, es decir, no hay restricción respecto a los pisos.

Un controlador especial mueve y manda señales para que se dé el mecanismo de movimiento.
El movimiento y la señal se da através de un botón, dicho botón, manda la señal para que elevador
se mueva al determinado piso.

Para saber si el elevador va subiendo o bajando, se indica mediante leds, por supuesto, también
se indicará el número de piso por el que el elevador va pasando, al llegar al piso soliciado, el
elevador deberá abrir sus respectivas puertas.

Al abrirse las puertas, los usuarios disponen de un determinado tiempo para abordar el elevador (x segundos).
El elevador dispondrá de un sistema de detección para saber si al cerrarse las puertas alguien desea abordar cuando
este se esté cerrando.

Para este problema, se tendrá en cuenta la c
apacidad del elevador y su respectivo espacio.

Destacan como clases:

Edificio

Piso
Elevador
Controlador de elevador

Presentaré el bosquejo del diagrama de clases, lue
go procederé a explicarlo detalladamente.

Clic en la imágen para verla en tamaño completo.



Como se puede apreciar en este sencillo diagrama de clases, se han definido 4 clases, "Edificio", "Piso", "Elevador", y controlador.

Se han especificado todas con dependencia, ya que todas depende de las otras para funcionar.

En la clase "Edificio", se han dado atributos Pisos de tipo "pisos", y he especificado 3 métodos o funciones, las 3 devuelven un valor entero(int).

En la clase Piso, se ha especificado un método llamado "get_piso()", que devuelve el número de pisos en el edificio, por supuesto, el valor devuelto es un entero.

En la clase Elevador se especifican como atributos "capacidad_kilos" que se da en enteros, y espacio que es la cantidad de metros cuadrados del elevador.
Dicha clase, tiene 4 métodos o funciones, get_piso() que devuelve el número de piso en el que está el elevador. moviendose() determina si el elevador está moviéndose, retorna un valor booleano. estado_puerta() determina si la puerta se encuentra cerrada o abierta, retorna un booleano. lleno(), determina si el elevador está lleno o no, retorna un booleano.

A continuación, el diagrama de casos de uso:

Clic en la imágen para ver en tamaño completo.




martes, 29 de septiembre de 2009

Diagramas de clases y usos


Como parte de mi materia "Fundamentos de programación", nos han encargado algunos casos de algunas situaciones, como este que pondré a continuación.

¿Qué es un diagrama de clases?

Un diagrama de clases es la representación de:
-Requerimientos en entidades y actuaciones.
-Soluciones de diseño de una arquitectura.
-Componentes de software orientado a objetos.

Control-Carro

Visión general:



-Activar y desactivar la alarma de un automóvil.
-Poner y quitar seguros.
-Abrir cajuela.
-Botón de pánico.
Detalles:

Activar y desactivar la alarma.
Activación.

El conductor presiona el botón del control.

Al presionar sólo una vez : Se ponen todos los seguros.
Al presionar dos veces : Pone la alarma en espera activa.

Clic en la imágen para verla a mayor calidad.








sábado, 26 de septiembre de 2009

UML - Unified Modeling Language

La primera pregunta que me surgió al oír este término fue:

¿Qué es UML?



Primeramente, UML significa "Unified modeling language" por lo que previamente se podría inferir lo que quiere decir, UML está hecho como un lenguaje común para modelar software orientado a objetos, UML provee de herramientas especializadas para dar un analisis profundo del problema(programa) que se esté atacando.

UML provee de las siguientes herramientas:

  • Diagramas de casos de uso
  • Diagrama de clases
  • Diagrama de estados
  • Diagrama de secuencias
  • Diagrama de actividades
  • Diagrama de colaboraciones
  • Diagrama de componentes
  • Diagrama de distribución

La notación usada en UML es vasta, y basta para exponer objetos, atributos, clases y sus respectivas relaciones.

Diagrama de clases


Este tipo de diagramas representan las clases dentro de un modelo conceptualizado.

En lenguajes de programación orientado a objetos, las clases poseen atributos, variables miembro y operaciones(operaciones miembro).

Los diagramas de clase pueden representar las relaciones entre clases fácilmente.



La clase anterior llamada "Ing Sistemas", en donde se define los atributos como enteros de tipo "int", y se define una función de tipo "void" llamada "get_age()".

Relaciones de composición


Este tipo de relaciones se utilizan cuando en la clase existe una instancia de tip
o Point, este tipo de relación entre clases se llama "composición", y es representada de esta manera:


La punta de fecla en el otro lado de la relación, denota que la relación solo es permitida solo en esa dirección, es decir "clase2" no sabe nada acerca de "clase1".

Herencia

La herencia en UML es representada con una flecha con punta de pizza, esta flecha apunta hacia la clase base, que es de donde se derivan las demás clases (hijas).

Agregación/Asociación

La forma de agregación es mostrada con un diamante abierto, está relación denota que la clase agregada es en alguna manera el "entero" y la ota clase en la relación es como parte de ese entero, de ahí que se le llame "agregación".

martes, 22 de septiembre de 2009

Reconocimiento de clases y objetos y sus relaciones en el mundo real


Se trata básicamente reconocer en el mundo físico, es decir, alejado de lo virtual, todo aquello que pudiera reconocerse como un objeto y una clase.

Pero, ¿qué es un objeto?


Un objeto se define como una estructura que encapsula atributos (características) y comportamientos (procedimientos) de una entidad con un papel bien definido en una aplicación.


Dicho objeto puede tener como propiedades:


- Estado: Conjunto de valores de los atributos en un instante de tiempo dado. El comportamiento de un objeto puede modificar el estado de este.

- Comportamiento: Relacionado con su funcionalidad y determina las operaciones que este puede realizar o a las que puede responder ante mensajes enviados por otros objetos.

- Identidad: Es la propiedad que permite a un objeto diferenciarse de otros. Generalmente esta propiedad es tal, que da nombre al objeto.

Los obje

tos pueden ser reconocidos a nuestro alrededor, basta con poner algo de atención.








Los objetos no sólo tienen atributos, también tienen comportamientos, es decir acciones que desempeñan, es decir, métodos o funciones, ejemplo afín con los objetos presentados anteriormente:

Profesor: Enseña, evalúa.

Mesa: Ordenada, desordenada.

Silla: Ocupada, desocupada.

Pizarrón: Pintado, borrado


¿Qué es una cla

se?

Es la definición de un objeto. Cuando se programa un objeto y se definen sus características y funcionalidades, realmente se programa una clase.

Pondré un ejemplo para que quede entendido.

Supongamos que poseemos un plano de Infonavit:

Podremos considerar los planos de Infonavit como una clase, ya que, contiene especificaciones e instrucciones que sirven para construir un objeto, que en este caso serían las casas.

Un objeto que es la instanciación de la clase, no puede existir si no existe la clase.



Abstracción

Es un método por el cual abstraemos valga la redundancia, una determinada entidad de la realidad de sus características y funciones que desempeñan, estos son represent

ados en clases por medio de atributos y métodos de dicha clase.

Ejemplo: La abstracción de un automóvil.

- Características: Color, año de fabricación, modelo, etc.

- Métodos o Funciones: Frenar, encender, etc.

A esto se le llama abstracción. En general un programa no es más que una descripción abstracta de un procedimiento o fenómeno que existe o sucede en el mundo real.

Resumiendo, la abstracción es una forma de elegir entre las caracteristicas más relevantes, es decir, caracteristicas y funcionalidades.


Incluiré un video que resulta bastante fácil de entender, está hecho por alumnos de la Facultad de Matemáticas de la Universidad Autonoma de Yucatán, así que todos los creditos hacia ellos.





En sí no es dificil de entender, pero hablando de código, ¿todos estos conceptos como se verían en un lenguaje de programación con el paradigma orientado a objetos?
// No sé si el código sea sintáticamente correcto.
class Empleado
{
private:
// miembros...
float Juan;
public:
float funcion();
void otrafuncion();
// Constructores
~Empleado
};


Así me resultó más fácil de entender, ya que esperaba con ansia un poco de código para entender.


Ahora, apartir de la susodicha clase se podría crear el objeto, es decir, la instanciación:


Empleado Juan;



Saludos.

sábado, 5 de septiembre de 2009

Leonardo Gutierrez Ramirez found a way to use numbers as variables in a FOR loop

Aparición en el sitio de RobVanDerWoude.com

robvanderwoude.com es un sitio especializado en lenguajes Scripting, se exponen técnicas avanzadas sobre diferentes lenguajes, como Batch, Perl, Visual Basic Script, y otros más.

Expuse una técnica de incrustación de comentarios en archivos por lotes o batch files.

La técnica trata del uso del comando "SET".

El articulo completo:
http://robvanderwoude.com/clevertricks.php

Buscar en Wikipedia [ PERL ]

Por medio de un módulo y con la ayuda del lenguaje Perl, podemos automatizar la búsqueda en Wikipedia.com.

Esto es con la finalidad de darle más funcionalidad a la terminal de comandos.

Ejemplo de búsqueda:

leo@lein:/usr/local/bin$ perl wiki.pl "lala"

Los 'lala' son un grupo de habla chibemba de unos 150000 individuos que viven en
Zambia central, al oeste del río Luangua.
leo@lein:/usr/local/bin$

Me devuelve el resultado de la búsqueda.

Aquí el código:
#!/usr/bin/perl
use strict;
use warnings;
if($#ARGV != 0)
{
print "$0 \"Busqueda\"\n";
exit(0);
}
$ARGV[0] =~ s/(\w+)/\u\L$1/g;
use WWW::Wikipedia;
my $wiki = WWW::Wikipedia->new();
$wiki = WWW::Wikipedia->new(language => 'es');
my $result = $wiki->search("$ARGV[0]");
if(!$result)
{
print "Error: ", $wiki->error(), "\n";
exit(1);
}
if($result->text())
{
print $result->text();
}
exit(0);

Acciones sobre archivo de texto.

Me resulta muy grato la aceptación que ha tenido ese artículo.

En general, se trata sobre diferentes acciones que podemos hacer sobre archivos de texto (texto plano) con archivos por lotes o batch files.

Aunque he resuelto la mayoría con Batch, recomiendo más Perl, Perl es el rey para la trata de archivos de texto.

Aquí el link hacia el articulo:

http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html

Bug en CMD.EXE, comando FOR, parametro /F

En las pasadas vacaciones, experimenté un poco con el interprete de Windows, CMD.EXE, para variar, descubrí algunas cosas nuevas, al parecer el "parser" de dicho interprete, es más flexible de lo que creía.

Por medio de estas andanzas, he descubierto un bug en cmd.exe, resulta demasiado evidente, aquí el link directo a "elhacker.net", ahí es donde lo posteé.

http://foro.elhacker.net/bugs_y_exploits/bug_en_cmdexe_comando_for_parametro_f-t259992.0.html