Posts Tagged ‘Objetos’

Objetos

febrero 13, 2015
En su forma más general, un programa orientado a objetos es un conjunto de objetos pasándose mensajes para resolver un problema.

Si pensamos a la computadora como 4 objetos: un teclado, un mouse, un monitor y un gabinete, cada vez que apretamos una tecla del teclado o movemos del mouse, el teclado o el mouse le envían un mensaje al gabinete. El gabinete recibe el mensaje y lo procesa y a su vez le envía un mensaje al monitor, que puede ser según el caso dibuja un caracter o cambiá el ángulo de visión de un esapcio 3d.

El problema a resolver puede ser escribir este texto o mover el punto de vista de un personaje en un juego. Los controladores, la cpu y el monitor son los objetos. Las señales eléctricas entre los dispositivos son los mensajes.

¿Cómo hace para hacer todas esas tareas intermedias? No nos preocupa en un principio. Nosotros nos preocupamos por tipear, no cómo llegan los carcteres del teclado al monitor. O bien nos enfocamos en mover el mouse a la velocidad correcta que nos permita observar el paisaje 3d de manera satisfactoria, no los cálculos matemáticos para que ese mundo virtual sea verosímil. A esto de preocuparnos por el qué y no por el como, se lo suele llamar declaratividad. A medida que vayamos adquiriendo más experiencia en el desarrollo de soluciones, vamos a sentirnos tentados a pensar primero el “como” y mirar con desdén el que. Esto hace que nuestras soluciones se vuelvan difíciles de mantener y que de a poco vayamos perdiendo el encanto de lo simple. Por eso conviene siempre no perder de vista el “que” antes de poner el ojo en el “como”.

Los objetos no tienen que ser réplicas de la realidad, alcanza con que sean metáforas que nos permitan resolver un problema de la manera más simple posible y que fáciles de leer cuando alguien o uno mismo tenga que hacer algún ajuste en la solución o solucionar un problema nuevo con estos objetos.

Las metáforas que elijamos van a condicionar profundamente nuestra solución y nuestro estado de ánimo en el futuro.

PHP 4 se discontinúa

agosto 5, 2007

Según el sitio de PHP la versión 4 se discontinúa a fin de año, después de más de 7 años de buen y leal servicio. Se seguirán haciendo fixes críticos hasta el 08/08/08.

Para empezar a ponerse en tema acá hay una guía de migración a la versión 5.

Por lo que pude ver de la versión 5, además del modelo de objetos mejorado, la inclusión de iteradores, SQLite, manejo de excepciones, trae mejoras en las funciones del tratamiento de strings y unicode. Si bien esto no se anuncia con bombos y platillos, es muy util para nosotros, que estamos fuera del charset ASCII.

Las aplicaciones que se ven más afectadas son aquellas que hacen uso del -tan vapuleado- modelo de objetos de PHP4. La ventaja es que el modelo actual es muy parecido al de java, permitiendonos aprovechar nuestra experiencia en el lenguaje de Sun. Sin embargo hay una directiva para mantener la compatibilidad con el modelo anterior.

Así las cosas, habrá que ponerse a actualizar y revisar lo programados.

Saludos!

jQuery

julio 27, 2007

jQuery es una biblioteca javascript. Su slogan es “Escribí menos, hacé más”. La idea es escribir JavaScript de una manera intuitiva.

Ahí me sonó la alarma: ¿escribir JavaScript de una manera intuitiva? ¡Ni loco! Bastante me tomó aprender a garabatear js para andar cambiando a esta altura del partido. Pero seguí, porque me llamaba la atención. Además porque tenía que usarlo con SPIP.

¿En qué consiste entonces esa manera intuitiva?

jQuery nos propone acceder a los elementos mediante consultas al DOM y devolviéndonos un objeto adaptador.

¿Por qué usar esta forma?

La manera de seleccionar los objetos es muy flexible. Se basa en tres formatos, 2 de los cuales son estándar: CSS, XPath y uno propietario (y bastante intuitivo). Se pueden ver acá

A su vez los objetos adaptadores son muy flexibles. Nos permiten manejar los atributos, los eventos, los adyacentes y padres en el DOM, algunos efectos visuales y ajax. Todo esto está muy bien documentado en docs.jquery.com.

¿Cómo empiezo?

Primero hay que bajar la biblioteca. La incluimos en nuestra página mediante:

<script type="text/javascript" src="jquery.js" mce_src="jquery.js">
<script>//mi c&oacute;digo fuente</script>

Una de las primeras cosas que debemos hacer es ejecutar código cuando la estructura del documento está cargada. Esto lo hacíamos con window.onload = function() { … }. Pero había que esperar a que carguen las imágenes. jQuery soluciona esto mediante método $().ready().

$(document).ready(function() { ... })

¿Qué es $()?

Es la consulta propiamente dicha y nos retorna el objeto adaptador. Se le puede pasar un cadena con la consulta, un elemento del DOM o incluso una cadena html que nos genera elementos html en el aire.

Otra propiedad interesante es que los métodos del objeto adapta retornan el mismo objeto (salvo aquellos donde lo que se retorna es un valor, como se verás más abajo). Esto permite encadenar varias acciones sobre los objetos reduciendo las líneas de código.

Para cerrar vamos a mostrar un pequeño ejemplo. Tenemos una lista de títulos y textos descriptivos. Esto podrían ser feeds de un blog. Queremos listar los títulos y ver solo la descripción cuando alguno en particular nos interese.

<ul>
	<li><span>titulo 1</span>
    
Este es el texto de   la descripci&Atilde;&sup3;n colapsable n&Atilde;&ordm;mero 1
    <a href="#" mce_href="#">mostrar</a></li>
	<li><span>titulo 2</span>
   
Este es el texto de   la descripci&Atilde;&sup3;n colapsable n&Atilde;&ordm;mero 2
    <a href="#" mce_href="#">mostrar</a></li>
	<li><span>titulo 3</span>
   
Este es el texto de   la descripci&Atilde;&sup3;n colapsable n&Atilde;&ordm;mero 3
    <a href="#" mce_href="#">mostrar</a></li>
</ul>

El script quedaría de la siguiente forma:

<script>$(document).ready(function(){ //Las etiquetas a que sean contenidas por una etiqueta li $("li > a").click(function() {  //si tienen por rótulo "ocultar"  if ($(this).html()=="ocultar")  {   //ocultan el elemento previo   $(this).html("mostrar").prev().hide("slow");   }  else  {   //sino muestran el elemento previo   $(this).html("ocultar").prev().show("slow");  } 

  return false; }); 

}); 

</script>

De esta manera tenemos descripciones colapsables con pocas líneas. La mitad del espacio son comentarios y llaves para hacer legible el código.

¿Bastante intuitivo, no?

Quería hacer una mención respecto a $(). En otro post dije que las funciones en JavaScript son objetos de tipo Function. Este es un caso. Se puede ver bien en el código como se usa esta función objeto y como final jQuery se puede usar con otras bibliotecas y frameworks JavaScript.

Esto se hace invocando al método $noConflict() del objeto jQuery. De esta manera $() queda libre (por ejemplo para prototype) y con invocar jQuery en vez de $() tenemos la misma funcionalidad.

Con eso ya hay para divertirse. ¡Hasta la próxima!

Objetos en javascript

julio 20, 2007

Los objetos en JavaScript son un tema que siempre me han traído problemas. En este post voy a tratar de ordenar un par de ideas.

Primero que nada podemos definir 3 tipos de objetos (¡no clases!):
– Objetos estándar del navegador: Varían según el navegador. Entre los comunes están Window, document. Mozilla provee XMLHttpRequest, MSIE los propios de ActiveX.
– Objetos del lenguaje: Los objetos de la implementación, como String, Array, Date, etc.
– Objetos propios: Estos son los objetos definidos por nosotros o por una biblioteca en particular.

Los objetos se pueden crear como funciones:

//Definici&Atilde;&sup3;n del objeto, si se quiere la "clase"
function MiObjeto (valor){
  this.unMetodo = function () {
    alert(this.unAtributo);
  }
  this.unAtributo = valor;
}

//instanciando el objeto
var oObjeto = new MiObjeto('hola, mundo!');
var oOtroObjeto = new MiObjeto();
oObjeto.unMetodo();

Con eso tenemos dos objetos en las variable oObjeto y oOtroObjeto construidos según la función MiObjeto(). A su vez tenemos unAtributo que tiene el valor que le pasamos al constructor y unMetodo que imprime el atributo. No es muy útil, pero sirve para mostrar lo básico.

El concepto de clase es un poco ambiguo en JavaScript. Al menos para el que viene de un lenguaje un poco más “prolijo” como Java o C++. En nuestro pequeño ejemplo, la clase sería MiObjeto y la instancia sería oObjeto. JavaScript nos permite extender nuestro objeto. Esto es tan simple como la línea que sigue.

oObjeto.otroMetodo = function ()
{
  confirm('Me entiende?');
}

oObjeto tiene un método nuevo: otroMetodo que nos va a preguntar si lo entendimos. Si invocamos otroMetodo desde oOtroObjeto vamos a comprobar que no nos pregunta nada. Esto se debe a que en la línea de más arriba solo modificamos la instancia oObjeto. Esto es muy interesante y es una fuente de errores. JavaScript nos permite modificar nuestro objeto en “caliente”. Podemos agregar o redefinir métodos existentes y agregar atributos.

¿Pero podemos cambiar nuestras “clase” MiObjeto? Sí, esto se hace mediante el atributo prototype de MiObjeto. La clase se define mediante una función. Las funciones son objetos de tipo Function (sí, suena a traba-lenguas). Podemos agregar atributos y métodos a nuestro objeto Function mediante el atributo protoype:

MiObjeto.prototype.otroMetodo = function ()
{
  confirm('Ahora me lees?');
}

Si probamos invocar ahora oOtroObeto.otroMetodo() vamos a a ver el confirm preguntando si ahora lo lees. Dejo al lector curioso que verifique qué pasa con oObjeto.otroMetodo().

Lo bueno de esto es que nos permite crear clases y objetos, extenderlos o redefinir su comportamiento. En algunos navegadores, como en Firefox, es posible redefinir y extender los objetos estándar. Algunos sin embargo están “sellados” por motivos de seguridad.

Para cerrar voy a hablar de JSON. Yo trabajaba en avatar y un día me pidieron hacer una aplicación que hacía uso intensivo de JavaScript y DOM. Un compañero me recomendó utilizar JSON. JSON es un acrónimo para JavaScript Object Notation y es una manera de definir objetos y funciones en JavaScript así como también un formato liviano de intercambio de datos, como se define en su sitio. Es muy útil como sustituto de XML en algunos casos. En algunas aplicaciones AJAX podemos recibir cadenas JSON en lugar de XML y evitar tener que lidiar con DOM. El framework The Dojo Toolkit es un ejemplo de esto. Pero esto será objeto de otro post, más adelante.

Saludos!