Lesson 6.0 – Un Poco de Teoria
Estas son las tres cosas mas importantes a tener en mente cuando trabajes con ObjC; Objetos, Metodos y Punteros.
Un Objeto es cualquier cosa que tu quieres que sea. Vas a construir un plano para un objeto segun lo que necesites que ese objeto sea. O usar planos para objetos que ya existen y que puedas utilizer para lo que quieres hacer.
Un Metodo es algo que un objeto puede hacer para pasar, comunicar, modificar o destruir data de alguna forma.
Un Puntero es lo que usamos para comunicarnos con los objetos, basicamente usamos punteros hacia objetos, una vez que los hemos creado, a manera de comunicarnos y enviar mensajes de accion entre objetos para llevar a cabo las tareas que queremos.
Estos planos se llaman clases y estan definidos por un juego de archivos .h y .m.
Interface (.h) & Implementation (.m)
Objects
Los objetos son creados para llenar tus necesidades. Existen objetos predefinidos tales como NSArrays, NSDiccionarios, NSStrings y NSNumeros. Estos son objetos que se usan para gestionar piezas de data; como juegos de objetos, llaves y valores, y data de numero y texto respectivamente.
Tambien hay objetos mas grandes creados de las Clases tales como la Clase UIViewContoller que tiene un plano para un objeto VC que manejara tales Views; o como la Clase UITableViewController que tiene un plano para un Objeto VC que gestiona listas de data para tablas etc..
Finalmente estan los objetos que creas, que veras tipicamente en cursos enlinea. Si quieres crear un Objeto Pato, tendras que especificar que caracteristicas tendra tu pato.
Objeto Pato
En el siguiente ejemplo, obtenido en linea, veras que el Objeto Pato tendra una caracteristica llamada plumas. Mas adelante especificaras una caracteristica llamada pico y otra llamada patas. Posteriormente les fijaras valores a cada una de estas caracteristicas; Plumas de Pato = 10; y asi sucesivamente.
Pointers
Tal como mencionamos anteriormente, en ObjC estaras trabajando principalmente con punteros. Un puntero, como lo definimos anteriormente, no dice x= 7. Mas bien un puntero dice, *x (el valor de X) esta almacenado en este espacio en la memoria.Por que es tan importante esto? Bueno pues uno puede lograr cosas muy poderosas y manejar objetos muy complejos de manera mas eficiente. Aprenderas acerca de su poder, a su debido tiempo, por ahora solo sepan que un puntero es cualquier cosa que tiene un * en frente de ella.
Hemos dicho anteriormente que crearemos documentos de Clase, los cuales sirven de planos conteniendo variables y otros objetos que podemos usar para definer el objeto que querramos. Aqui tenemos 2 ejemplos:
Deseamos crear un Objeto de tipo Carro
Necesitamos que el Carro sea una Subclase NSObject. En el archive .h especificaremos una marca, modelo y tipo de carro con color, motor y otras especificaciones. La marca y el modelo pueden ser NSStrings, asi como el tipo de carro. El color del carro puede ser UIColor pero ya el motor es un asunto un poco mas complicado ya que tienen muchas especificaciones. Asi es que el motor no sera ni un string, ni un numero ni un color, sera un array No te asustes! Esto solo quiere decir que no es 1 valor por variable, sino que multiples valores por variable. Los motores tienen tamano, volumen, una serie de pistons asi es que cuando describes un motor debes decir 3 cosas de una sola vez, no solo una. Asi es que hagamos un NSArray de motor, o mejor aun un NSDiccionario
Estos son objetos ya existentes que, en el caso del NSDiccionario, estan estructurados para tener una llave a un Objeto. Asi es que para la llave “Pistones” podemos tener el Objeto o Valor “6” y para la Llave “Configuracion” podemos tener un Valor “V” para un motor V6. El Objeto Carro puede verse algo asi:
NSMutableDictionary *myCar = [NSMutableDictionary alloc] init];
[myCar setObject:@"6" forKey:@"Pistons"];
[myCar setObject:@"V" forKey:@"Configuration"];
El archivo .m tendra cosas como un metodo init que dice que cuando alguien llama la Clase Carro a manera de crear un Objeto Carro, deben especificar todos las especificaciones necesarias, como motor, color, marca, modelo etc y yo, el compilador, les dare a cambio un Nuevo y relumbrante Objeto Carro que cualquiera pueda utilizar.
Queremos crear un Objeto View Controller
Para esto tendremos que utilizar una Clase Controladora de View UITable porque queremos que sea como una lista de celdas. Pero en vez de hacer que tenga un trasfondo blanco, lo modificaremos para que tenga un trasfondo negro. Y en vez de tener solo celdas con texto, lo cambiaremos a manera que tenga un objeto UIImage en cada celda. Asi es que especificaremos estas caracteristicas para este Objeto que crearemos. Pero estamos empezando de algun punto en particular, una Clase UIView y luego lo subclasificaremos para hacerlo lo que querramos.
Al final terminaremos con un programa que tendra planos para hacer cualesquiera objetos querramos, con las caracteristicas que querramos. Y todo lo que tenemos que hacer es apuntar hacia esos objetos y hablarles. Estos punteros pueden apuntar a los objetos desde las clases que ya existen como las NSArrays, NSStrings, UIViews o a objetos que nosotros mismos creamos tales como NSObjeto-Carro o NSArray- Motor. Mas importante aun, es que podemos hablarle a esos objetos y hacerlos que hagan lo que nosotros querramos a travez de los Metodos.
METODOS
Los objetos intercambian data via mensajes que son metodos definidos en los planos
Un metodo no es nada mas que un mensaje que le envia un objeto a otro objeto que por lo general espera algo a cambio. Asi es que por ejemplo:
[Car pressBrakes]; //por cierto estos son solo comentarios, esto envia el mensaje de apretarFrenos al objeto Carro.
Esperemos que el metodo apretarFrenos; de hecho le diga al carro que se detenga y no que acelere!
[Car pressBrakes:hard]; // hace lo mismo pero le envia un valor a un parametro que el metodo acepta.
El metodo podria verse algo asi:
-(void) pressBrakes:(NSString*)force{
if (force = hard){
[Car setSpeed=0]; }
else {
[car setSpeed=--10];
}
}
Esto quiere decir, no solo deten el carro…sino que quiere decir, piensa, razona, interpreta, si los frenos se apretan duro, entonces fijar la velocidad del Carro a 0 de un solo! De lo contrario, desacelerar la velociad del carro por 10 millas por hora.
Nuevamente, desen cuenta que estamos usando punteros… (NSString *) fuerza es un puntero a, no el variable en si.

























