jueves, 27 de marzo de 2008

1 - PHP 5 - Programación Orientada a Objetos

Porque Objetos?
________________________________________
A medida que las secuencias de comandos se hacen cada vez mas complejas, la dificultad de mantenerlas aumenta extraordinariamente, especialmente si estamos programando con estilos de procedimientos. El concepto de programación orientada a objetos OOP, sirve para proporcionar una estructura organizativa real a nuestras secuencias de comandos a través del encapsulado.
Aunque PHP 4 introdujo la noción de OOP en PHP, no se puede considerar realmente una verdadera implantación orientada a objetos. Debido a las significativas limitaciones en PHP 4 a este respecto, el modelo de objetos de PHP 5 se ha rediseñado completamente para reflejar con precisión la definición académica de OOP.


Creación de clases básicas
________________________________________
Aunque denominemos programación orientada a objetos a este estilo de programación, la gran mayoría de la programación se realiza desarrollando clases. Una clase puede definirse como el diseño de un objeto y define todas las acciones que el objeto puede realzar. Por tanto, las definiciones de clase contienen variables, funciones (denominadas métodos) e incluso constantes que son especificadas solo para dicha clase o sus instancias.
Ejemplo:

class myEjemplo
{
public $Myvar

public function MiMetodo($parametro)
{
$this->Myvar = $parametro;
echo $this->Myvar;
}
}


Cuando se ha definido una clase se puede crear una instancia de dicha clase, una instancia de una clase es un objeto y representa una copia de la clase definida previamente. Para crear una instancia de myEjemplo utilizamos la sentencia new:

incluye_once(‘MiArchivo.php’);
$miInstancia = new myEjemplo();
$otraInstancia = new myEjemplo();

En este caso las dos variables representan objetos del tipo myEjemplo. Aunque se han creado de la misma definición de clase, son completamente diferentes entre si.

incluye_once(‘MiArchivo.php’);
$miInstancia = new myEjemplo();
$miInstancia -> MiMetodo(“Hola soy un parámetro recibido”);

Cuando se ejecute este comando en la pantalla se vera impreso lo que le pasamos por parámetros.


Métodos private, protected y public
________________________________________
En PHP 5 la definición y el uso de clases no ha cambiado mucho. De hecho, en PHP si definiéramos una clase al estilo PHP 4 trabajaría igual, pero en sintaxis 5, nos ofrece las diferencias arriba mencionadas.
Esta diferencia nos ofrece una nueva e importante opción en el modelo de orientación a objetos de PHP 5: los controles de acceso. En PHP 4 no había ningún concepto de control de acceso dentro de los objetos. Como desarrollador externo que utiliza la clase myEjemplo, no hay nada que me impida cambiar el valor de la variable $Myvar. Sin embargo en PHP 5 el modelo de objetos proporciona ahora tres niveles de acceso para los miembros de clase, que restringen los datos a los que se puede acceder y desde donde se pueden acceder a ellos en nuestras secuencias de comandos. Estos tres modelos de acceso son public(publico), private(privado) y protected(protegido) y se pueden aplicar tanto a métodos como a propiedades de la clase.
A los miembros de la clase declarados como públicos se puede acceder desde cualquier parte de una secuencia de comandos. Pueden modificarse o llamarse internamente por el objeto o desde fuera del objeto, algo que no se aplica a los miembros de clase solo desde dentro de una instancia de dicha clase a través de la variable $this.
El tercer y último nivel de acceso que proporciona PHP es el nivel protected. Este nivel es similar a la private, ya que evita el acceso a miembros de clase externamente. Sin embargo, al contrario de private que restringe el acceso solo a la clase especifica donde se ha definido, protected permite el acceso desde la misma clase o desde cualquier clase hija.

Indicaciones de tipo.
________________________________________

Otra mejora en PHP 5 para el modelo de objetos es el concepto de indicaciones de tipo. PHP es, por diseño, un lenguaje sin tipos, es decir, las variables no se restringen al tipo de datos que contienen. De hecho, algunas variables pueden tratarse en un momento como enteros y en otro como cadenas. Sin embargo, como los métodos dentro de los objetos normalmente aceptan parámetros que son instancias de otros objetos, PHP 5 nos permite restringir los tipos de datos de los parámetros de método.
Por ejemplo consideremos el siguiente ejemplo:

class entero
{
private $numero
public function getInt()
{
return (int) $this->numero;
}
public function setInt($num)
{
$this->numero = (int) $num;
}
}

class flotante
{
private $numero;
public function getFloat()
{
return (float) $this->numero;
}
public function setFloat($num)
{
$this->numero = (float) $num;
}
}


Estas clases definen entero y flotante, que aplican un envolvente simple para los tipos de datos enteros y de punto flotante dentro de php. Y que hay si necesitamos aplicar una clase de forma que se añadan solo los puntos flotantes? Con los conocimientos que ustedes tienen podríamos resolverlos de esta manera:

class math
{
public function add($op1, $op2)
{
return $op1->getFloar() + $op2->getFloat();
}
}


Sin embargo, debido a la naturaleza de PHP, no hay seguridad de que los parámetros $op1 y $op2 serán instancias de la clase flotante. Incluso aunque estuviésemos seguros de que fuesen objetos, no habría ningún método conveniente para saber si son del tipo correcto. Una posible solución es utilizar el nuevo operador instanceof en PHP 5, que devuelve un valor booleano que indica si una variable es una instancia de una determinada clase:

class math
{
public function add($op1, $op2)
{
if(($op1 instanceof flotante) && ($op2 intanceof flotante))
{
return $op1->getFloat() + $op2->getFloat();
}
else
{
echo ‘Deben pasar dos flotantes como instancias en los parámetros’;
}
}
}


Nuestra clase math tiene un método para asegurarse de que los parámetros que se pasan son objetos del tipo correcto. Sin embargo dicha técnica puede conseguir que nuestro código sea propenso a error y confuso en su lectura. Una mejor solución que consigue el mismo objetivo es especificar el tipo exacto que necesitamos en el prototipo de la función.

class math
{
public function add(flotante $op1, flotante $op2)
{
return $op1->getFloat() + $op2->getFloat();
}
}

De este modo podemos indicar claramente el tipo especifico requerido por el método add() y podemos suponer con seguridad de que va a existir el método getFloat().


Constructores y Destructores
________________________________________
Los constructores y destructores son funciones a las que llamamos cuando creamos una nueva instancia de un objeto(contructores), y/o la destruimos(destructores). Su proposito principal es permitir inicializar y limpiar después un objeto, por ejemplo:

class BaseClass
{
function __construct()
{
print ‘contructor en clase base\n’;
}
}

class SubClass extendí BaseClass
{
function __construct()
{
parent::__construct();
print ‘Constructor en subclase\n’;
}
}

$obj = new BaseClass();
$obj = new SubClass();


Los constructores padres no son llamados implícitamente si la clase hijo define un constructor. Para poder ejecutar el constructor de la clase padre, se debe hacer una llamada a parent::__construct() dentro del constructor de la clase hijo.
Este es un ejemplo de destructor:

class MyDestructableClass
{
function __construct()
{
print ‘In constructor\n’;
$this->name = ‘MyDestructableClass’;
}
function __destruct()
{
print ‘Destroying ‘ . $this->name – “\n”;
}
}
$obj = new MyDestructableClass();


Aunque los constructores son útiles para inicializar propiedades de clase, la combinación de constructores y destructores es igualmente útil de otras formas. Un ejemplo clásico es una clase para acceder a la conexión de una base de datos, donde un constructor crea la conexión y el destructor la cierra.


Constantes de Clase.
________________________________________

Las constantes de clase son una nueva caracteristica de PHP 5 que proporcionan, como su nombre implica, una opcion para definir valores constantes dentro de una definición de clase. Por ejemplo:

class MyClass
{
const constant = ‘Valor Constante’;
function showConstant()
{
echo self::constant . “\n”;
}
}
echo MyClass::constant . “\n”;

$class = new MyClass();
$class -> showConstant();
// echo $class::constant; NO ESTA PERMITIDO


El ejemplo ilustra el usa de las constantes de clase tanto en la propia clase como fuera de ella. Para acceder desde fuera de la clase tendríamos que usar el operador de resolución (también llamado Paamayim Nekudotayim) o en términos simples, dobles dos puntos (::), es un símbolo que permite acceso a los miembros o métodos estáticos, constantes y eliminados de una clase.


Métodos Estáticos
________________________________________

Los metodos estaticos son metodos que forman parte de una clase, pero que se han diseñado para llamarse desde fuera del contexto de la instancia de un objeto. Se comprotan de forma identica a los metodos normales en una clase desde todos los puntos de vista excepto en un detalle importante: los metodos estaticos no pueden utilizar la varibles $this para hacer referencia a la instancia actual del objeto.
Ejemplo de un metodo estatico:

class Foo
{
public static $my_Static = ‘foo’;
public function staticValue()
{
return self::$my_static;
}
}

class Bar extends Foo
{
public function fooStatic()
{
return parent::$my_static;
}
}

print Foo::$my_static . “\n”;
$foo = new Foo();
print $foo -> staticValue() . “\n”;
print $foo -> my_static . “\n”;
// Propiedad indefinida my_static
//$foo::my_static no es possible

print Bar::$my_static . “\n”;
$bar = new Bar();
print $bar -> fooStatic() . “\n”;



Herencia de Clases
________________________________________

La herencia es por definición, la capacidad de una definición de clase extender otra funcionalidad de definición de clase.
Cuando se hereda una clase de otra, todos los métodos, propiedades y constantes de la clase padre se encuentra n disponibles también desde la clase hija. Así mismo, las clases hijas también pueden volver a implantar algunos o todos los métodos, propiedades y constantes de una clase padre para proporcionar una funcionalidad adicional o diferente. Las clases se heredan de otra utilizando la palabra clave extends en la definición de clase.


Clases y Métodos abstractos
________________________________________

Como su nombre implica, las clases abstractas se utilizan en OOP para definir objetos abstractos. Para entender lo que define a un objeto abstracto consideremos el concepto de la comida. Todos sabemos lo que es la comida, pero, lo hemos visto?. Hemos visto varios tipos de comida, carne, pollo, verdura, etc, pero el concepto de comida es en si un concepto abstracto. Ese concepto también se aplica a las clases abstractas. En OOP, las clases abstractas se diseñan para proporcionar una súper clase que define las características abstractas de las clases heredadas. Las clases abstractas pueden o no tener código en ellas, y nunca pueden crear instancias de ellas directamente.

Ejemplo de una clase abstracta y su herencia correspondiente:

abstract class AbstractClass
{
//Forza a las clases extendidas a implementar estos metodos
abstract protected function getValue();
abstract protected function prefixValue($prefix);

//metodo comun
public function printOut()
{
print $this -> getValue() . “\n”;
}
}

class ConcreteClass1 extends AbstractClass
{
protected function getValue()
{
return ‘concreteClass1’;
}
public function prefixValue($prefix)
{
return ‘{prefix]}ConcreteClass1’;
}
}


class ConcreteClass2 extends AbstractClass
{
protected function getValue()
{
return ‘concreteClass2’;
}
public function prefixValue($prefix)
{
return ‘{prefix]}ConcreteClass2’;
}
}

$class1 = new ConcreteClass1();
$class1 -> printout();
echo $class1 -> prefixValue(‘FOO_’) . “\n”

$class2 = new ConcreteClass2();
$class2 -> printout();
echo $class2 -> prefixValue(‘FOO_’) . “\n”



El resultado del ejemplo seria:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

miércoles, 19 de marzo de 2008

Como optimizar tu sitio

Este articulo es a modo de introducción, luego voy a ir hilando mas fino sobre los temas planteados, y otros de los cuales todavía no se hablaron.

Para optimizar nuestro sitio, necesitaremos como primera instancia, seguir con las directrices que ya publique en el articulo Principios para posicionar tu sitio. Ahora para hilar un poco mas fino, vamos a ver algunos factores que debemos tener en cuenta para que nuestro sitio sea optimo.
Uno de los principales factores a tener en cuenta son las Meta-etiquetas que utilizamos, las principales son la de description (que describe el contenido de la pagina) y la de keywords (que son las palabras por las que pueden encontrar tu sitio en los motores de búsqueda)
También es importante que la etiqueta “title” sea lo mas descriptiva posible, pero a la ves no muy extensa, ya que esto ya no seria optimo.
Estas son las principales, ya que los motores de búsqueda toman la etiqueta title para mostrar en el buscador como link a tu pagina, la Meta-etiqueta description que es la descripción que aparece a continuación, y la Meta-etiqueta keywords que le dice al buscador que cuando un usuario ponga por ejemplo la palabra “Posicionamiento Web” y en tus keywords se encuentra esta palabra clave, entonces debe aparecer en el buscador como se ve en la imagen debajo. Esto no quiere decir que si nosotros ponemos una palabra clave en nuestro sitio, y luego ponemos esa palabra clave en el buscador, nuestro sitio aparecerá en primera posición, pero justamente de eso se trata la optimización, de llegar a un nivel tan optimo como se pueda como para que en el futuro aparezca en la primera posición.

Por otro lado, no sirve de nada, tener el title, las keywords y descriptions mas optimas del mundo para nuestro sitio, si este no tiene buen contenido, por este motivo hay que tratar de ser lo mas original posible, crear tu propio contenido, que concuerde con lo que según las etiquetas ofreces.
Otro punto importante es la optimización de las URLs, a los motores de búsqueda no les gusta las URLs que reciben parámetros, como por ejemplo:

tudominio.com/pagina.html?var1=variable1&var2=variable2

Este es difícil de entender para los motores de búsqueda y la idea es facilitarle las cosas lo mas que se pueda, y de esa manera el nos mejorar nuestra posición, es un simple ida y vuelta, volviendo a las URLs es bueno que estas también contengan palabras claves, y en vez de tener la URL con parámetros que no se entienden, la podríamos reemplazar por la siguiente:

tudominio.com/variable1/variable2

donde variable1 y variable2 seria palabras claves. Esto se suele optimizar con el conocido archivo .htaccess del cual hablaremos mas adelante.

Directorios de enlaces

Una de las principales formas para empezar a posicionar tu sitio web, es que otros sitios tengan tu enlace en su pagina, para conseguir esto existen multiples directorios web en los cuales a cambio de un link reciproco en tu pagina, ellos te agregan a su directorio, verifica siempre que sean directorios con buenas fuentes, ya que si son spammer o cualquier otro fin que no sigue con las politicas de los motores de busqueda, puedes salir perjudicado, aca les dejo un listado de algunos. Si quieren sugerir algun otro directorio, bienvenido sea...


martes, 18 de marzo de 2008

Siestita mientras trabajo?

Desde hace unos meses, se están poniendo muy de moda en algunas empresas de EEUU una especie de cabinas para echar la siesta (en inglés, 'nap pods') dentro de las cuales los empleados se encuentran con un ambiente completamente aislado de luz y de sonido en el cual poder echar una cabezadita de varios minutos y poder así desconectar de la tensión de sus trabajos.

En la foto, se puede ver una de estas cabinas en las oficinas de la sede central de Google en California (EEUU), y en la que se puede ver cómo se trata de un modelo de la firma 'MetroNaps, la cual está vendiendo estos dispositivos a unos 8000 dólares la unidad. Además, en ciudades como Nueva York esta misma empresa está ofreciendo siestas de 20 minutos en sus cabinas por 14 dólares.

De esta manera, los trabajadores pueden desconectar durante unos minutos de las tareas que están realizando, para posteriormente volver a ellas con mayores energías, aumentando así la productividad.

Apoyo la moción para que sea obligatorio que las empresas dispongan de este dispositivo para sus empleados



Nace un buscador con fotos para elegir como fondo de página

Casi todo el mundo tiene como página de inicio la muy útil, pero aburrida página en blanco de un buscador. Searchecoweb nace con la idea de tratar de cambiar esa monótona página de fondo blanco por otra que nos alegre la vista cada vez que accedamos a internet. Para ello ha creado un buscador en el que se puede elegir la imagen que se quiere tener de fondo en él, pudiendo seleccionarla entre las cientos de las que dispone.

Una de las características destacadas de esté buscador es la facilidad con la que se puede cambiar de imagen y elegir una nueva de las que se encuentran entre su banco de fotos que ya cuenta con un número importante de imágenes de calidad que van a seguir ampliando.

Otra característica no menos importante es que como su propio nombre indica searchecoweb se presenta como una página web ecológica y nos enseña un estudio en el que demuestra que las páginas web con fondos de imágenes consumen menos energía que los tradicionales buscadores de fondo blanco ya que los monitores consumen más cuando tienen que mostrar colores claros y brillantes. Dado que los buscadores son las páginas más utilizadas y las más habituales como página de inicio, la idea de que se podría ahorrar una parte del consumo de energía de los monitores con solo cambiar esta página de inicio de fondo blanco lleva tiempo extendiéndose, y fruto de ello han salido una serie de buscadores con fondo negro, pero searchecoweb en su estudio sobre ahorro de energía demuestra que los fondos con imágenes producen prácticamente el mismo ahorro que los fondos negros planos. El estudio de Searchecoweb indica que ahorra hasta un 22% de energía en los monitores con respecto a las páginas de fondo blanco.

La tercera característica destacada de este buscador es que para evitar las reticencias a su utilización como página de inicio por el miedo a perder calidad en las búsquedas los resultados de searchecoweb son proporcionados por google por lo que utilizándolo como página de inicio se mantienen las garantías del buscador número uno.

lunes, 17 de marzo de 2008

Logo de Google por San Patricio

Por lo visto argentina no debe festejar este día según Google, aunque las calles de Buenos Aires esten repletas de gente vestida de verde tomando cerveza, pero bueno nos discriminan y tenemos el mismo logo feito de siempre...seguramente para semana santa tendremos 2 huevos de pascuas en ves de dos O. Aunque a nadie en Argentina le importa las pascuas si no los dias feriados, sin ofender a los religiosos, pero si hacen un encuesta, van a comprabar que es asi, lamento desepcionarlos...

Principios para posicionar tu sitio

Para poder posicionar tu sitio en los buscadores hay una serie de directrices a seguir


Siguiendo estas directrices ayudarás a los buscadores a buscar, a indexar y a clasificar su sitio en el ranking de resultados. El posicionamiento web es una practica que lleva meses y hasta años, no pretenda que su sitio aparezca en la primera posición luego de un mes, puede que le lleve 6 o 7 meses posicionarlo, y esto con un constante trabajo para lograrlo, así que si piensas posicionar tu sitio web, plantéate primero si tienes paciencia…


Cuando su sitio este terminado:

  • Conseguir que otros sitios relevantes, con buenos contenidos, que estén bien posicionados en los buscadores, con un Page Rank alto, enlacen tu sitio. Algunos directorios importantes son por ejemplo Open Directory Project y Yahoo!.
  • Dar de alta su sitio en los buscadores, por ejemplo en Google desde aquí.
  • Google ofrece una herramienta para monitorear su sitio, en el cual puede subir su Sitemap, ver las paginas que tiene indexadas, ver si tiene errores como paginas no encontradas(404 page not found), entre otras cosas. Puede acceder desde la siguiente url:http://www.google.com/webmasters/tools?hl=es/.

Directrices a seguir para el diseño y contenido de su sitio

  • Su sitio debe tener una jerarquía y vínculos de texto claros. La idea es que se pueda acceder a todas las paginas desde al menos un vinculo estático
  • Ofrecer a los usuarios un mapa del sitio con vínculos que apunten a las secciones importantes del mismo. Si el mapa tiene más de cien vínculos, se puede paginarlo para que no se haga tan extenso.
  • Su sitio debe ser útil, con mucha información y redacte páginas que describan el contenido con claridad y exactitud.
  • Determine las palabras claves (keywords) que los usuarios utilizarían para encontrar sus páginas y asegúrese de que su sitio las incluye.
  • Intente utilizar texto en lugar de imágenes para mostrar nombres, contenido o vínculos importantes. Los buscadores no reconocen texto incorporado en las imágenes.
  • Asegúrese de que los atributos ALT y las etiquetas TITLE sean descriptivos y precisos.
  • Compruebe que no haya vínculos dañados o código HTML incorrecto. Este ítem es fundamental, ya que si un vinculo esta dañado es probable que los buscadores no indexen ese vinculo, puede comprobar si usted no tiene errores en el código desde el Validador W3C
  • Si decide utilizar páginas dinámicas (es decir, una URL que contenga el carácter "?"), sepa que no todas las arañas de los motores de búsqueda rastrean páginas dinámicas, además de páginas estáticas. Se recomienda que los parámetros sean cortos y escasos.
  • Una página no debería contener más de cien vínculos.

Directrices técnicas que se aconsejan seguir

  • Es aconsejable utilizar un navegador de texto como Lynx para examinar su sitio, ya que la mayoría de las arañas lo analizan como lo haría esta aplicación. Si las funciones avanzadas como JavaScript, cookies, ID de sesión, marcos, DHTML o Flash impiden la visualización de todo su sitio en un navegador de texto, es posible que las arañas de los motores de búsqueda tengan problemas para rastrearlo.
  • Es recomendable que los robots de búsqueda rastreen sus sitios sin ID de sesión o argumentos que efectúan un seguimiento de su ruta por el sitio. Estas técnicas son de gran utilidad para supervisar el comportamiento de un determinado usuario, pero el patrón de acceso de los robots es completamente distinto. El uso de estos métodos puede llevar a una indexación incompleta de su sitio, ya que es posible que los robots no puedan eliminar las URL que tengan un aspecto distinto pero que en realidad apuntan a la misma página.
  • Asegúrese de que su servidor web admita la cabecera HTTP "If-Modified-Since". Esta función permite que su servidor Web avise a los motores de búsqueda si usted realizo alguna actualización sobre su sitio. La compatibilidad con esta función le ahorra ancho de banda y gastos generales.
  • Utilizar el archivo robots.txt en su servidor web. Este archivo comunica a los rastreadores qué directorios pueden o no rastrearse.
  • Si estas utilizando algún sistema de administración de contenido, asegúrese de que pueda exportar el contenido de modo que las arañas de los motores de búsqueda logren rastrear su sitio.
  • Utilice robots.txt para evitar el rastreo de páginas de resultados de búsqueda u otras páginas generadas automáticamente que carecen de valor para los usuarios procedentes de motores de búsqueda.

Directrices de calidad fundamentales para lograr una buena posición en los buscadores

Estas cubren las formas mas comunes de comportamiento engañoso o manipulador, es posible que los buscadores no aprueben practicas engañosas, como por ejemplo engañar a los usuarios con el registro de palabras escritas incorrectamente de sitios web conocidos, aunque muchos buscadores no especifican que estas practicas están prohibidas, si las realizas puedes ser sancionado y tal vez tu sitio nunca mas pueda estar en ese motor de búsqueda.

Si cree que algún sitio está vulnerando las directrices de calidad de los buscadores, y no estas de acuerdo en que un sitio diga tener algún contenido que en realidad no pueden ofrecer puede denunciarlo en los buscadores

Directrices de calidad: principios básicos

  • La idea es no perder de vista el objetivo, que seria crear paginas web para mostrar al mundo lo que usted quiera, con esto quiero decir que intente crear páginas para usuarios y no para motores de búsqueda. No engañe a sus usuarios ni presente a los motores de búsqueda contenido distinto al que les muestra a ellos; esta práctica se conoce como "encubrimiento".
  • Evite trucos destinados a mejorar los rankings en los motores de búsqueda. Una buena regla general es preguntarse si se sentiría cómodo al tener que explicar a un sitio web de la competencia lo que ha hecho. Otra prueba de gran utilidad es preguntarse: "¿Ayuda esto a mis usuarios?; ¿haría esto si no existiesen los motores de búsqueda?".
  • No participe en esquemas de vínculos diseñados para incrementar el ranking o el valor de PageRank de su sitio. En concreto, evite vínculos que enlazan con los creadores de sitios fraudulentos o "vecindarios indeseables" de la web, ya que su propio ranking podría verse afectado negativamente por ellos.
  • No utilice programas informáticos no autorizados para enviar páginas, comprobar rankings, etc.