miércoles, 23 de febrero de 2011

Especificación técnica

Taller de P-OO
Un escrito técnico que detalla la implementación restante del proyecto



Para realizar este documento utilicé estos como base:
STS document
STS antifraude

miércoles, 16 de febrero de 2011

Documentación y herramientas avanzadas de desarrollo

Taller de POO
Documentación para el código existente del proyecto y la explicación con ligas y capturas de pantalla sobre cómo fue generado


En mi caso utilizo Doxygen para crear a documentación, explicare paso a paso como se realiza incluyendo capturas de pantalla.


Comentamos nuestro código en xcode como explique en esta entrada




Lo primero que debemos de hacer para generar la documentacion con Doxygen para Objective-C es descargar el .dmg y arrastrarlo a application para que quede instalado, descargalo de esta pagina






Ahora si vamos a generar el doc, abres la aplicación y especificas el directorio de tu proyecto y el directorio donde estará el doc, todo eso en la pestaña Wizard.




 Ahora seleccionas la pestaña Expert del Step 2, y marcas JAVADOC_AUTOBRIEF.



Ahora del submenu Topics, seleccionas Build y luego marcas EXTRACT_ALL




Ahora seleccionas HTML, marcas GENERATE_DOCSET



En LaTeX, deseleccionas GENERATE_LATEX



Ahora le seleccionas Run, luego Run doxygen

Y tu documentación ya esta generada.








Para descargar esto en un .zip en esta pagina


Fuentes:
Documenting Objective-C Part 1 
Documenting Objective-C Part 2 
Doxygen Latest release 



Espero que mi entrada les sea de utilidad a todos aquellos que documentan en Objective-C

Documentación y herramientas de desarrollo

Clase de POO
Un texto que explica la importancia de documentación de software y la metodología que utilizarán para producirla, con ligas a herramientas


Importancia de la documentación de software.


Al decir documentar software, entendemos que es agregar información útil para que nosotros como desarrolladores podamos entender mas facil que es lo que se esta haciendo un código teniendo así una idea mas clara de como esta funcionando el software, explicando por que se hace cada cosa, es importante que como futuros programadores tengamos la iniciativa de realizar documentación ya que como todo, podemos cometer errores los cuales debemos de darle solución en conjunto con personas que no están ligadas con el programador inicial o agregar nuevas necesidades al programa según sea el caso, con una documentación esto es mas sencillo para una persona quien no se vio involucrado desde el principio, que viendo un trabajo que ya se realizó poder iniciar a partir de esto, otra cuestión es que si queremos desarrollar un trabajo en equipo, aqui tambien podemos ver la utilidad de la documentación al poder entender que hizo una persona y otra por lo tanto simplemente todo software que tenga futuro, tendrá que ser modificado para tener éxito.


En resumen, la importancia de la documentación es simple y sencillamente para poder restaurar, reparar, cambiarlo y modificarlo pensando en un desarrollo futuro.


Metodologia en Objective-C


Para empezar creo que es importante decir que documentar es agregar descripciones a todo lo que no es obvio y no debemos reincidir en lo que se esta haciendo repitiendo lo mismo que representa, lo que necesitamos es declarar porque se esta haciendo.


En mi caso utilizaré Doxygen, se comenta muy parecido a javadoc.
Para empezar, debemos documentar primero constructores de lenguaje C, despues los de Objective-C


/**
  Describimos la cadena de caracteres 
  */
const char* Cadenita = "Carmen, se me perdio";

/**
  Describimos una variable
  */
int Eje = 1;

float una, /**< Esto es cuando */
  dos,  /**< Tenemos multiples */
  tres; /**< Variables */

/**
  Asi se comenta una estructura de C Alumno
  */
struct Alumno {
   /**
     Podemos describir asi cada variable en este caso nombre
     */
   char nombre[15];
   char apellido[15]; /**< asi tambien, apellido */
}

/**
  Asi se comenta un define SoyUno 
  */
#define SOYUNO 1

/**
  Una funcion se documenta asi
  @param x decribimos el parametro x
  @param y describimos el parametro y 
  @returns lo que devuelve, en este caso una suma
  */
int suma( int x, int y);

/**
  Esta es una clase Carro
  */
@interface Carro : UIKit {
  /**
    El nombre del modelo del carro
    */
  NSString *Nombre;

  /**
    El numero del modelo
    */
  NSUInteger Numero;
}

/** 
  Muestra el precio de la que se va a pagar a dolares
  */
@property(readonly) NSDecimalNumber *Cambiame;

/**
  Inicializa un nuevo Carro Objeto
  @param nombre El nombre de modelo
  @param numero El numero de modelo
  @returns un objeto inicializado
  */
- (id)inicializaConNombre: (NSString *)nombre
             ModeloNumero: (NSUInteger)numero;    
@end

//Extras 

/**
  Clase que contiene muchas funciones
  @author Roberto Martinez http://roberto-mtz.blogspot.com
  */
@interface Funciones : NSObject {
}
/**
  Regresa la multiplicacion de dos numeros
  @param x Es una x con un valor entero
  @param y Es una y con un valor entero
  @returns la multiplicacion
  @since version 1.1
  @see Nombre-de-la-clase#Metodo-de-la-clase
  @see http://www.youtube.com/watch?v=8vHd5Jw3D2I
  @exception puede arrogar una excepcion
  @deprecated Pensamos que mejor utilizamos la suma
  */
int multipliacion( int x, int y);


Aqui podemos ver las diferentes situaciones que se nos pueden presentar y que tags agregar para que todo sea mas especifico Les dejo ligas de donde pueden encontrar esta información y donde descargar el Doxygen
Documenting Objective-C Part 1 
Documenting Objective-C Part 2 
Doxygen Latest release 
Documentación de código

Espero que mi entrada les sea de utilidad a todos aquellos que documentan en Objective-C

miércoles, 9 de febrero de 2011

Sintaxis de clases: métodos, atributos, visibilidad (Sem 3)

Taller de POO
Código en el lenguaje OO que están usando que implementa la herencia y demuestra el uso de polimorfismo en el proyecto.


Ahora en esta entrada expongo el código en Objective C aplicando herencia de la clase Menu, hereda a Platillo, Bebida, Postre, Recomen y Cupon.


Simplemente se agrega en cada herencia la clase de la que hereda en este caso Menu, es importante (ya que a mi me marcaba error) importar Menu.h en las herencias, ya que ahi estamos declarando, este es un ejemplo código de como se hace una herencia.

@interface Clase : SuperClase {
         //Variables
}
//metodos
@end

Por lo tanto la super clase en Menu.m es la librería UIKit pero en Platillo, Bebida, Postre, Recomen y Cupon la super calase es Menu cuya super clase de Menu es UIKit, entonces este es un claro ejemplo de Herencia, en polimorfismo se encuentra en los metodos que tiene las clases hijas (mostrar, eliminar, ordenar), ya que cada uno tendra una funcionalidad similar en clases independientes.


Aqui los Código.
#import <UIKit/UIKit.h>


@interface Menu : UIView {
 @public NSString *clasificacion;
 @public IBOutlet UIImage *imagencomida;
 @public float *precio;
 @public NSString *Descri;
}

-(void)Mostrar;
-(void)Ordenar;
-(void)Clasificar;
@end

En Bebida, platillo y postre no agrege nuevas variables.
#import <UIKit/UIKit.h>
#import "Menu.h"


@interface Bebida : Menu {

}

-(void)Ordenar;
-(void)Mostrar;
-(void)Eliminar;
@end


#import <UIKit/UIKit.h>
#import "Menu.h"

@interface Platillo : Menu {
 
}

-(void)Ordenar;
-(void)Mostrar;
-(void)Eliminar;

@end


#import <UIKit/UIKit.h>
#import "Menu.h"

@interface Postre : Menu {

}

-(void)Ordenar;
-(void)Mostrar;
-(void)Eliminar;

@end

Se agregan nuevas variables heredando las de Menu.h, tambien podemos ver Polimorfismo ya que aqui los metodos anteriores tienen un uso diferente
#import <UIKit/UIKit.h>
#import "Menu.h"

@interface Recomen : Menu {
 @public int *puntuacion;
 @public NSString *comentario;
}

-(void)Mostrar;
-(void)Crear;

@end


#import <UIKit/UIKit.h>
#import "Menu.h"

@interface Cupon : Menu {
 @public IBOutlet UIImage *imagencupon;
}
-(void)Mostrar;
@end

Anexos de paginas:
Beginner's Guide
Inheritance O-C
Video informal

Herencia y polimorfismo: modularidad y reutilización de código

Materia de POO
Descripción textual que identifica y explica las relaciones de herencia utilizados en el proyecto


Primero explico en forma breve la herencia y el polimorfismo.
La herencia funciona basicamente igual que en la vida real, un padre o madre hereda a su hijo ciertas virtudes, en programación una super clase hereda a una clase ciertos atributos teniendo como ventaja reusar el código implicito y polimorfismo lo vemos en los metodos, esto es que podemos tener funciones del con nombres iguales pero en diferentes clases (sobrecarga), cuando usamos varias funciones con iguales nombres utilizando parametros diferentes (parametrico).  


Para facilitar el trabajo de un programador, en POO podemos encontrar reutilizar el codigo y asi generar herencia entre nuestras clases en donde podemos pasar de una clase a otra clase atributos para asi no volverles a programar para cada uno.


En esta semana tenemos de crear nuestro codigo generado la semana anterior pero ahora con herencia, para eso hice un diagrama en donde podemos ver donde es combeniente realizar la herencia.


Para explicar mi entrada anexo un diagrama en donde se trata de ver quien hereda a quien.





En este diagrama, a comparacion del de la semana pasada, podemos ver la herencia ya que la clase Menu que contiene los atributos de clasificación, imagen comida, precio y descripción van a heredar a Platillo, Bebida, Postre, Recomen y Cupon, siendo las ultimas dos las que se le agregan atributos aparte de sus superclases y el polimorfismo lo podemos encontrar en los metodos que contenga cada uno (mostrar, eliminar, ordenar), ya que cada uno tendra una funcionalidad similar en clases independientes.


Tambien encontramos que ubicame es una clase que no hereda nada de Menu siendo una clase que unicamente hereda de UIView, por lo tanto espero que la distribución de herencia y polimorfismo en mi idea de proyecto este correcto, en la otra entrada muestro el codigo.

miércoles, 2 de febrero de 2011

Sintaxis de clases: métodos, atributos, visibilidad

Reporte para Taller de POO


Esta es la declaración de las Clases, metodos y atributos de mi proyecto final.
En los archivos .h se declaran y en el .m es lo que va a realizar.
Todas las funciones las puse en void ya que solamente necesitamos la sintaxis
Para la ventana se crea un AppDelegate, .h y .m, tambien un ViewController .h y .m
A continuación propongo mi idea de la sintaxis
Utilizo las librerias UIKit para agregar las imagenes y botones.

#import <UIKit/UIKit.h>
@interface Recomen : UIView {
 @public int *puntuacion;
 @public NSString *comentario;
}

-(void)Mostrar;
-(void)Crear;

@end
#import "Recomen.h"


@implementation Recomen

-(void)Mostrar{

}

-(void)Crear{

}
@end


#import <UIKit/UIKit.h>


@interface Platillo : UIView {
@public NSString *clasificacion;
@public IBOutlet UIImage *imagen;
@public float *precio;
@public NSString *Descri;
@public NSString *Recomen;
}

-(void)Ordenar;
-(void)Mostrar;
-(void)Eliminar;

@end

#import "Platillo.h"
@implementation Platillo
-(void)Ordenar{

}
-(void)Mostrar{

}
-(void)Eliminar{

}
@end

#import <UIKit/UIKit.h>

@interface Botones : UIView {
@public IBOutlet UIButton *Menu;
@public IBOutlet UIButton *Ubicame;
@public IBOutlet UIButton *Recomen;
@public IBOutlet UIButton *Cupon;
}

-(void)Seleccionar;

@end

#import "Botones.h"


@implementation Botones
-(void)Seleccionar{

}
@end

#import <UIKit/UIKit.h>


@interface Ubicame : UIView {
 @public NSString *sucursales;
 @public NSString *ubicacion;
}

-(void)Mostrar;

@end



#import "Ubicame.h"


@implementation Ubicame
-(void)Mostrar{

}
@end


#import <UIKit/UIKit.h>

@interface Postre : UIView {
 @public NSString *clasificacion;
 @public IBOutlet UIImage *imagen;
 @public float *precio;
 @public NSString *Recomen;
 @public NSString *Descri;
}

-(void)Ordenar;
-(void)Mostrar;
-(void)Eliminar;

@end

#import "Postre.h"


@implementation Postre
-(void)Ordenar{

}
-(void)Mostrar{

}
-(void)Eliminar{

}
@end


#import <UIKit/UIKit.h>


@interface Menu : UIView {
 @public NSString *Platillo;
 @public NSString *Bebida;
 @public NSString *Postre;
}

-(void)Mostrar;
-(void)Ordenar;
-(void)Clasificar;
@end

#import "Menu.h"


@implementation Menu
-(void)Mostrar{

}
-(void)Ordenar{

}
-(void)Clasificar{

}
@end


#import <UIKit/UIKit.h>


@interface Bebida : UIView {
 @public NSString *clasificacion;
 @public IBOutlet UIImage *imagen;
 @public float *precio;
 @public NSString *Recomen;
 @public NSString *Descri;
}

-(void)Ordenar;
-(void)Mostrar;
-(void)Eliminar;
@end

#import "Bebida.h"

@implementation Bebida
-(void)Ordenar{
 
}
-(void)Mostrar{
 
}
-(void)Eliminar{
 
}
@end

Al momento de Build and Run no nos marca ningun error, abre el Simulador y todavia no se realiza nada.


Roberto

Diseño de programas en términos de clases múltiples

Materia de POO


Para la creación de un programa en POO debemos de dividirlo en Clases, que estos a su ves tengan atributos y métodos, en esta entrada explicare el diseño de la aplicación en términos de clases múltiples, para eso realice un diagrama en donde están subdivisiones de lo que pudiera necesitar mi programa.









Aquí podemos ver como ventana se va a dividir en dos partes, una área donde mostrara la información y Botones, esos botones tendrán la opción de escoger entre ver el menú, en donde cada platillo, bebida y postre tendrá sus propios métodos, entre ellos Clasificación, Precio, Imagen, Descripción, Ordenar y la Puntuación.


También encontraremos un botón donde tendremos la ubicación (No estoy seguro si es una sincronización con google Maps), en donde nos muestre la Ubicación de nosotros y la de las sucursales.


Entra un Botón que muestre Recomendaciones, como un guestbook y un Cupón que se actualice cada semana.


Espero que mi clasificación de Clases este de un modo correcto, en la otra entrada asigno métodos a las clases y atributos.