Sei sulla pagina 1di 31

UNIVERSIDAD JOSE CARLOS MARIATEGUI

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Programación orientada a objetos

1. Introducción.

La programación orientada a objetos (Poo) es un paradigma de programación más


orientado a como vemos las cosas en la vida real que otros tipos de programación
(programación lógica, funcional, imperativa,...)

Este tipo de programación permite solventar algunos de los problemas que ha tenido el
desarrollo del software desde sus comienzos, como por ejemplo la falta de portabilidad y baja
reusabilidad del código, junto con la dificultad en la modificación y desarrollo del mismo.
Además es una técnica de codificación bastante mas intuitiva que el resto.

La programación orientada a objetos tiene tres propiedades básicas: Debe estar basado en
objetos, estar basado en clases y debe de ser capaz de mantener una herencia entre clases.
La mayoría de los lenguajes cumplen una o dos de estas propiedades pero pocos logran
cumplir las tres. En particular, la herencia.

Posteriormente veremos los conceptos objeto, clase y herencia junto con el resto de
conceptos asociadazos a la Poo.

Aprender esta técnica no es complicado, pero es una manera subjetiva de programar que
depende del desarrollador. Aunque podemos dar diferentes soluciones a un mismo problema,
no todas ellas son válidas. La dificultad no radica en aprender esta técnica, si no en ejecutarla
bien. Solo programando bien podemos aprovechar todas las ventajas que nos ofrece la
programación orientada a objetos.

2. Origen.

Los orígenes de la programación orientada a objetos se encuentran en Simula67. Este era


un lenguaje creado para realizar simulaciones en el Centro de Cómputo Noruego en Oslo. Sus
desarrolladores fueron Ole-Johan Dahl y Kristen Nygaard.

Se dieron cuenta de que las cualidades de las naves con las que estaban simulando podía
afectar unas a otras. Su idea fue la de agrupar diversos tipos de naves en diversas clases de
objetos. Los objetos se agrupan en clases y estas definen sus propios datos y operaciones.
Esta idea fue pulida posteriormente en Smalltak1, desarrollado en Simula2 en Xerox PARC3.

Fue diseñado para ser un sistema completamente dinámico en el cual los objetos se
podrían crear y modificar "en marcha" en lugar de tener un sistema basado en programas
estáticos.

1
Smalltalk: es un sistema informático que permite realizar tareas de computación mediante la interacción con un entorno de
objetos virtuales.
2
Simula: primer lenguaje de programación orientada a objetos (OOP).
3
Xerox PARC: una división de investigación de Xerox Corporation, con sede en Palo Alto.
INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

En los años ochenta la programación orientada a objetos adquiere un papel dominante


debido a la aparición de C++, una extensión de C que soporta este tipo de programación.
Termina consolidándose finalmente con el auge de las Interfaces gráficas de usuario. Estas
facilitan la comunicación del usuario con el ordenador mediante un sistema de iconos, ventanas
y textos para los cuales la programación orientada a objetos está muy bien adaptada.

Las características de esta técnica de programación fueron añadidas a muchos lenguajes


existentes tales como Ada, Basic, Fortran, Pascal y otros. Pero estos lenguajes no se crearon
para soportarlas lo que condujo a problemas de compatibilidad y mantenimiento del código,
mientras que los lenguajes diseñados específicamente para ello carecían de las herramientas
indispensables para muchos programadores que no podían trabajar sin ellas.

El problema era conseguir un lenguaje basado en los métodos de la programación


orientada a objetos, pero que incluyese algunas de las características del resto de paradigmas
de manera segura. El Eiffel de Bertrand Meyer fue uno de los primeros leguajes que
solventaron este problema; aunque se encuentra en desuso debido a la gran aceptación de
Java y su maquina virtual que se encuentra implantada en la mayoría de navegadores web.

Mas recientemente, nuevos lenguajes han apareciendo orientados a objetos pero con un
procedimiento mas metodológico, como Pitón y Ruby. Probablemente, después de Java los
lenguajes orientados a objetos mas importantes sean Visual Basic y C# diseñados para la
plataforma .NET4 de Microsoft.

3. Conceptos básicos de POO.

 Objeto: Conjunto concreto de datos y operaciones (métodos). Se corresponden con los


objetos que nos rodean. Un ejemplo de objeto puede ser un libro. Tiene una serie de
propiedades (número de hojas, autor, editor, ...) y unas operaciones (se puede abrir, leer,
anotar, ...)
 Clase: Conjunto de las propiedades y métodos de un tipo de objeto determinado.
Podemos definir la clase libro, donde un objeto perteneciente a esta clase sería “El Camino” de
Miguel Delibes.
 Método: Algoritmo asociado a una clase de objetos o a uno de ellos. Se ejecutan tras
recibir un "mensaje". Un método es lo que los objetos pueden hacer. No puedo escribir con un
libro, por ejemplo. Un método puede producir un cambio en algunas de las propiedades del
objeto, y/o la generación de un "evento" junto con un mensaje que se envía a otro objeto o así
mismo. De esta forma, en el ejemplo de los libros, el método leer generaría un mensaje dirigido
al propio libro para que fuese abierto.
 Evento: Es un suceso en el sistema. El programa envía el mensaje adecuado al objeto
pertinente.
 Mensaje: Información dirigida a un objeto, el cual le dice que ejecute uno de sus métodos
con ciertos parámetros asociados al evento que lo generó.

4
.NET: proyecto de Microsoft para crear una nueva plataforma que permita un desarrollo de aplicaciones rápido. Microsoft
pretende desarrollar una estrategia que sume todos sus productos, desde el Sistema Operativo hasta sus herramientas de
mercado.
INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

 Propiedad o atributo: Características de un objeto o una clase de objetos. Permiten ver


los datos asociados a un objeto desde fuera. Su valor puede ser alterado por el evento
provocado por un método
 Estado interno: Propiedad invisible de los objetos que solo se ve afectada por un método
del objeto. Se utiliza para indicar las distintas situaciones del objeto o clases de objetos.

4. Características de la Poo.

 Abstracción: Permite no preocuparse por los detalles de implementación de cada tipo de


dato. Estos toman el nombre de tipos de datos abstractos (TDA), incluidos en los lenguajes
Pascal, Ada, Modula-2 y C++ entre otros. La abstracción está presente en casi todos los
lenguajes de programación actuales. Algunos ejemplos de abstracción son los ya mencionados
TDA, las estructuras de datos, los procedimientos y las funciones.
 Encapsulamiento: Consiste en separar la implementación de los objetos de los objetos
en si. De este modo solo se puede cambiar el estado del objeto mediante las operaciones
asociadas al mismo, sin tener que modificar su código. Así también se evita que el usuario
altere su estado de manera incontrolada.

Esta propiedad también recibe el nombre de “ocultación de la información”. El usuario del


objeto desconoce la distribución de la información dentro del objeto y la información disponible
en él. Pero gracias a los métodos asociados a cada uno puede usarlos y manejarlos. Un
ejemplo de encapsulamiento es el circuito eléctrico de una casa. El usuario solo accede a
ciertas partes del circuito (enchufes e interruptores), aunque las partes del circuito internas
comparten información entre si.

 Polimorfismo: Es la posibilidad que ofrece la Poo de asociar a objetos diferentes distintos


métodos con el mismo nombre. Cada objeto actuará en consecuencia según como este
implementado el método. Por ejemplo, el mensaje "+" a un objeto de tipo entero significa suma,
mientras que para un objeto de tipo cadena significaría concatenación.

Cuando esto sucede en tiempo de ejecución, hablamos de asignación tardía o asignación


dinámica. C++ tiene la posibilidad de polimorfismo en tiempo de compilación mediante
operadores.

 Herencia: las clases de objetos no están desligadas unas de otras, sino que se relacionan
entre sí, formando una jerarquía. Los objetos heredan las propiedades y el comportamiento de
todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el
encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados
de objetos preexistentes.

Esto suele hacerse agrupando los objetos en clases y las clases en árboles que reflejan un
comportamiento común. Cuando un objeto pertenece a más de una clase se llama herencia
múltiple, aunque esta característica no está soportada por algunos lenguajes como Java.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

5. Diferencias con la programación imperativa5.

La programación imperativa condujo a mejoras de la técnica de programación secuencial, tales


como la programación estructurada y "refinamientos sucesivos", los métodos modernos de
diseño de software orientado a objetos incluyen mejoras entre las que están el uso de los
patrones de diseño, diseño por contrato, y lenguajes de modelado (ej: UML).

Las principales diferencias son:

 La POO es más moderna, es una evolución de la programación imperativa que plasma en


el diseño de una familia de lenguajes conceptos que existían previamente con algunos nuevos.
 La POO se basa en lenguajes que soportan sintáctica y semánticamente la unión entre los
tipos abstractos de datos y sus operaciones (a esta unión se la suele llamar clase).
 La POO incorpora en su entorno de ejecución mecanismos tales como el
polimorfismo(capacidad del código de un programa para ser utilizado con diferentes tipos de
datos) y el envío de mensajes entre objetos.

Con el tiempo se le fueron adjudicando problemas a la programación imperativa. Esos


problemas fueron haciéndose cada vez más graves y antes de la programación orientada a
objetos diversos autores encontraron soluciones basadas en aplicar estrictas metodologías de
trabajo. De esa época son los conceptos de cohesión y acoplamiento. De esos problemas se
destacan los siguientes:


Modelo mental anómalo. Nuestra imagen del mundo se apoya en los seres, a los que
asignamos nombres sustantivos, mientras la programación clásica se basa en el
comportamiento, representado usualmente por verbos.
 Es difícil modificar y extender los programas, pues suele haber datos compartidos por
varios subprogramas, que introducen interacciones ocultas entre ellos.
 Es difícil mantener los programas. Casi todos los sistemas informáticos grandes tienen
errores ocultos, que no surgen a la luz hasta después de muchas horas de funcionamiento.
 Es difícil reutilizar los programas. Es prácticamente imposible aprovechar en una
aplicación nueva las subrutinas que se diseñaron para otra.
 Es compleja la coordinación y organización entre programadores para la creación de
aplicaciones de media y gran envergadura.

En la programación orientada a objetos pura no deben utilizarse llamadas de subrutinas,


únicamente mensajes.
Por ello, a veces recibe el nombre de programación sin CALL, igual que la programación
estructurada se llama también programación sin GOTO.
Sin embargo, no todos los lenguajes orientados a objetos prohíben la instrucción CALL (o su
equivalente), permitiendo realizar programación imperativa y orientada a objetos a la vez.

6. Lenguajes orientados a objetos

5
Apartado extraído de http://es.wikipedia.org/wiki/Orientado_a_objetos
INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

 Ada: se usa en entornos en los que se necesita una gran seguridad y fiabilidad, como en
la defensa.
 C++: está considerado como el lenguaje más potente, debido a que permite trabajar
tanto a alto como a bajo nivel, aunque obliga a hacer casi todo manualmente, al igual
que C, lo que hace difícil aprendizaje.
 C#: combina el control a bajo nivel de lenguajes como C y la velocidad de programación
de lenguajes como Visual Basic.
 VB.NET: es una versión de Visual Basic destinada al desarrollo de aplicaciones .NET.
Visual Basic apareció en el año 1991 como una evolución del QuickBasic que fabricaba
Microsoft.
 Clarion: está orientado a la programación de aplicaciones de bases de datos. Es
compatible con una gran cantidad de ellas incluyendo todas las de formato SQL, ADO, y
XML, además puede generar salidas a HTML, XML, archivos de texto y PDF, entre
otros.
 Delphi: entorno de desarrollo de software diseñado para programación general con
especial énfasis en la programación visual. En Delphi se utiliza como lenguaje una
versión moderna de Pascal llamada Object Pascal. Es producido por Borland. Delphi da
la posibilidad de producir archivos ejecutables para Windows, GNU/Linux y la plataforma
.NET.
 Eiffel: fue creado en 1985 por Bertrand Meyer. Se centra en la construcción de software
robusto. Su lenguaje es parecido al de Pascal.
 Java: fue desarrollado por James Gosling y sus compañeros de Sun Microsystems al
inicio de la década de 1990. A diferencia de los lenguajes de programación
convencionales, Java es compilado en un bytecode6 que es ejecutado por una máquina
virtual Java. El lenguaje toma mucha de su sintaxis de C y C++, pero tiene un modelo de
objetos mucho más simple y elimina herramientas como los punteros.
 Lexico: es un lenguaje en español que busca facilitar el aprendizaje y la enseñanza de la
programación orientada a objetos. Permite experimentar con los algoritmos diseñados
sin tener que dedicar meses a aprender un lenguaje de programación.
 Objective-C: Es el principal lenguaje de programación en Mac OS X. Mac OS X es el
sistema operativo de la familia de ordenadores Macintosh.
 Ocaml: nace de la evolución del lenguaje CAML, abreviación de Categorical Abstract
Machine Language), al integrarsele la programación con objetos.
 Oz: es un lenguaje multi-paradigma. Contiene la mayoría de los conceptos de los
principales paradigmas de programación, incluyendo programación lógica, funcional,
imperativa, orientada a objetos, con restricciones, distribuida y concurrente.
 PHP: es un lenguaje de programación usado generalmente para la creación de
contenidos en webs. El nombre es el acrónimo recursivo de "PHP: Hypertext
Preprocessor", inicialmente PHP Tools, o, Personal Home Page Tools. Se trata de un
lenguaje interpretado.

6
Bytecode: código intermedio, más abstracto que el código máquina. Habitualmente se lo trata como a un fichero
binario que contiene un programa ejecutable similar a un objeto, que es un fichero binario que contiene código máquina
producido por el compilador.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

 PowerBuilder: herramienta de desarrollo de clase empresarial creada por la empresa


Sybase. PowerBuilder permite el desarrollo de diferentes tipos de aplicaciones y
componentes para arquitecturas cliente/servidor, distribuídas y Web. Las aplicaciones
desarrolladas con PowerBuilder solo pueden ser ejecutadas en el sistema operativo
Microsoft Windows, aunque cierto tipo de componenetes, llamados componentes no
visuales o NVOs, y que contienen sólo lógica de aplicación, se pueden ejecutar en otros
sistemas operativos como Unix.
 Python: es un lenguaje de programación interpretado e interactivo, capaz de ejecutarse
en gran cantidad de plataformas. Creado por Guido van Rossum en 1990, su nombre
procede de la afición de su creador por los humoristas británicos Monty Python. El
principal objetivo de este lenguaje es la facilidad, tanto de lectura, como de diseño.
 Ruby: es un lenguaje de programación interpretado de muy alto nivel. Fue creado en
Japón en el año 1993 por Yukihiro Matz Matsumoto.
 Smalltalk: es considerado como el primer de los lenguaje orientado a objetos. Dentro de
Smalltalk todo es un objeto, incluidos los números reales o el propio entorno Smalltalk.

No todos estos lenguajes son igualmente eficaces. Existen lenguajes como OOCOBOL,
OOLISP, OOPROLOG y Object REXX que han sido desarrollados añadiendo a sus versiones
anteriores las características de la orientación a objetos, como ya pasara con C++.

La cosa mas difícil para aprender (y enseñar dicho sea de paso) en PHP orientado a objetos
es... lo básico. Pero una vez que obtengas el conocimiento, el resto vendrá mucho, mucho
mas fácil.

Pero no te desanimes! Tu has encontrado el tutorial mas fácil de entender sobre POO y
PHP.

Esto podría sonar como un reclamo jactancioso... lo se. Pero eso es lo que los nerd del
zeitgeist están diciendo.

... O al menos es lo que he escuchado.

Vídeos:

Como un bonus extra, he creado unos tutoriales de vídeo para ti. Ellos cubren el mismo
material como el articulo escrito, y son diseñados para reforzar el articulo.

Si tienes preguntas/comentarios, puedes contactarme en: stefan@killersites.com Gracias,

Stefan Mischook

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Programación Orientada a Objetos en PHP

La Programación Orientada a Objetos (POO) es un tipo de programación agregada a PHP 5


que hace de la construcción compleja, modular y reusable de aplicaciones web mucho mas
fácil

Con el lanzamiento de PHP 5, los programadores en PHP finalmente tienen el poder de


programar como los grandes. Asi como Java y C#, PHP finalmente tiene una completa
infraestructura POO.

En este tutorial, seras guiado (paso a paso) a través del proceso de construir y trabajar con
objetos usando las capacidades de POO. Al mismo tiempo aprenderás:

• La diferencia entre construir una aplicación al estilo antiguo (por procedimiento) versus la
manera POO.

• Cuales son los principios básicos de la POO y como se usan en PHP.

• Cuando debes usar POO en tus scripts PHP.

La gente entra en confusión cuando programa por falta del entendimiento de lo básico Con
esto en mente, vamos a pasar lentamente sobre los tema básicos de la POO mientras
creamos nuestros propios objetos en PHP.

Con este conocimiento, podrás ser capaz de explorar POO aun mas. Para este tutorial,
debes entender un poco lo básico de PHP: funciones, variables, condicionales y bucles o
repeticiones.

Para hacer las cosas mas fácil, el tutorial se encuentra dividido en 23 pasos:

Paso 1:

Primera cosa que necesitamos es crear dos paginas PHP:

index.php class_lib.php

a POO trata acerca de crear código modular, de manera que nuestro código PHP orientado a
objetos sera contenido en archivos dedicados que serán insertados en nuestra pagina PHP
usando "includes" de PHP. En este caso todo nuestro código PHP OO estará en el archivo
PHP:

class_lib.php

OOP se revuelve alrededor de una estructura construida llamada 'clase' (class). Las clases
son los encargados de definir las plantillas que posteriormente son usadas para la definición
INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

de objetos.

Paso 2:

Crea una clase en PHP

En vez de tener un montón de funciones, variables y código flotando de manera espontánea,


para diseñar sus scripts PHP o librerías de códigos a la manera de POO, necesitaras
definir/crear tus propias clases.

Defines tus propias clases comenzando con la palabra clave "class" (clase) seguida del
nombre que le quiere dar a su nueva clase.

<?php
class person {

}
?>

Paso 3:

Agrega datos a tu clase

Las clases son los planos de los objetos PHP- mas sobre esto luego. Una de las grandes
diferencias entre las funciones y clases es que la clase contiene ambos datos (variables) y
funciones que forman un paquete llamado un "objeto". Cuando tu creas una variable dentro
de una clase, es llamada una "propiedad".

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

<?php
class person { var
name;
}
?>

Nota: Los datos/variables dentro de una clase (ej: var name ) son llamados "propiedades".

Paso 4:

Agrega funciones y métodos a tus clases.

De la misma manera que las variables obtienen un nombre diferente cuando son creadas
dentro de una clase (llamadas: propiedades) las funciones también referidas como (por los
nerds) con un nombre diferente cuando son creadas dentro de una clase – son llamadas
‘métodos’.

Los métodos de las clases son usados para manipular su propios datos/propiedades.

<?php
class person { var
$name;
function set_name($new_name) {
$this->name = $new_name;
}
function get_name() { return
$this->name;
}
}
?>

Nota: No olvides que en una clase, las variables son llamadas "propiedades".

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Paso 5:

Funciones que obtienen y que establecen.

Hemos creado dos funciones/métodos interesantes: get_name() y set_name(). Estos


métodos siguen una convención de POO que tu podrás ver en muchos lenguajes
(incluyendo Java y Ruby) donde creas métodos que establecen y obtienen propiedades en
una clase.

Otra convención (una convención para nombrar) es que los nombres para obtener
(get_name) y establecer (set_name) deberían ser similares a los nombres de las
propiedades (name).

<?php
class person { var
$name;
function set_name($new_name) {
$this->name = $new_name;
}
function get_name() { return
$this->name;
}
}
?>

Nota: Notese que los nombres que obtienen y establecen (set_name y get_name) hacen
juego con el nombre de propiedad asociada (name). De esta manera, si otros programadores
PHP quieren usar sus objetos, ellos sabrán que tienes un método/función llamado
"set_name()" (establecer nombre), el cual se relaciona con la propiedad/variable llamada
"name" (nombre).

Paso 6:

La variable '$this'

Ya probablemente has notado esta linea de código:

$this->name = $new_name.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

El $this es una variable incluida (construida automáticamente dentro de todos los objetos)
que apunta al objeto actual. O en otras palabras, $this es una variable especial de auto-
referencia. Puedes usar $this para accesar a las propiedades y llamar a otros métodos de la
clase actual donde te encuentras.

function get_name() {
return $this->name;
}

Nota: Esto podría ser un poco confuso para ti... esto es porque lo estas viendo por primera
vez, es una de aquellas capacidades del OO (construidas dentro del mismo PHP 5) que hace
las cosas automáticamente para nosotros. Por ahora, solo piense de $this como una palabra
clave OO. Cuando PHP se encuentra con esta variable, el motor PHP sabe que hacer.
... Muy pronto tu también sabrás que hacer con ella.

Paso 7:

Incluye tu clase en la pagina principal de PHP.

Tu nunca deberías crear tus clases PHP directamente dentro de las paginas
principales de PHP– esto eliminaría el propósito o esencia del uso de PHP
orientado a objetos.

En vez de esto, la mejor practica es crear paginas de PHP separadas que solo contengan las
clases. De esta forma accesarias a sus objetos y clases PHP incluyéndolas en tu pagina PHP
principal con un "include" o "require".

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>OOP in PHP</title>
<?php include("class_lib.php"); ?>
</head>
<body>
</body>
</html>

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Nota: Nota como no hemos hecho nada con nuestra clase aun. Lo haremos en el siguiente
paso.

Paso 8:

Instancia/crea tu objeto

Las clases son planos/plantillas de objetos en PHP. Las clases no se hacen objetos hasta
que realizas algo llamado: instanciamiento.

Cuando tu instancias una clase, creas un instancia de ella (valga la redundancia), creando
así el objeto.

En otras palabras, el instanciamiento es el proceso de crear de una clase, una objeto en


memoria. Que memoria? La memoria del servidor por supuesto.

<?php include("class_lib.php"); ?>


</head>
<body>
$stefan = new person();
</body>
</html>

Nota: La variable $stefan viene a ser la referencia/manejador de nuestro nuevo objeto de


persona creado. Yo llamo a $stefan un "manejador", porque usaremos a
$stefan para controlar y usar el objeto persona.

Si ejecutas el código PHP ahora, no podrás ver nada mostrado en la pagina. La razón para
esto, es que no le hemos dicho a PHP que haga algo con el objeto que acabamos de crear.

Paso 9:

La palabra clave "new" (nuevo)

Para crear un objeto fuera de una clase debe usarse la palabra clave "new".

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Cuando creas/instancias una clase, puedes opcionalmente agregar llaves al nombre de la


clase, como yo hice en el ejemplo de abajo. Para estar claro, tu puedes ver en el código de
abajo como yo pude crear múltiples objetos de la misma clase.

Desde el punto de vista del motor PHP, cada objeto es su propia entidad. Tiene sentido?

<?php include("class_lib.php"); ?>


</head>
<body>
$stefan = new person();
$jimmy = new person;
</body>
</html>

Nota: Cuando estés creando un objeto, asegúrate de no encerrar el nombre de la clase en


comillas simples o dobles. Realizar esto ocasionaría un error ya que en vez de ser una
clase seria una cadena de caracteres

Por ejemplo:

$stefan = new 'person';

... te dará un error.

Paso 10:

Estableciendo las propiedades del objeto.

Ahora que hemos creado/instanciado nuestros dos objetos separados "persona", podemos
establecer sus propiedades usando los métodos (set_name y get_name) que nosotros
hemos creado.

Tenga en mente que aunque ambos de nuestros objetos personas ($stefan y $nick) son
basados en la misma clase "person", a lo que concierne a PHP, son objetos totalmente
diferentes.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

<?php include("class_lib.php"); ?>


</head>
<body>
<?php
$stefan = new person();
$jimmy = new person;
$stefan->set_name("Stefan Mischook");
$jimmy->set_name("Nick Waddles");
?>
</body>
</html>

Paso 11:

Accesando los datos del objeto.

Ahora nosotros usamos el método get_name para obtener acceso a los datos mantenidos en
nuestros objetos... son los mismos datos que nosotros insertamos en nuestros objetos
usando el método set_name.

Cuando accesamos a los métodos y propiedades de una clase, usamos el operador (->)
llamado Operador Flecha o técnicamente Operador de Objetos.

<?php include("class_lib.php"); ?>


</head>
<body>
<?php
$stefan = new person();
$jimmy = new person;
$stefan->set_name("Stefan Mischook");
$jimmy->set_name("Nick Waddles");
echo "Stefan's full name: " . $stefan->get_name(); echo
"Nick's full name: " . $jimmy->get_name();
?>
</body>
</html>

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Nota: El operador flecha (->) no es el mismo operador usado con los arreglos asociativos:
(=>).

Felicitaciones. Ya llevas la mitad del camino a través del tutorial. Tiempo para tomarte un
receso y algo de te. OK de repente un poco de cerveza.

En breve, habrás:

• Diseñado una clase PHP.


• Generado/creado un par de objetos basado en tu clase.
• Insertado datos en tus objetos.
• Recuperado datos de tus objetos.
... No tan mal para tu primer día en PHP POO.

Si no lo has hecho aun, ahora es el gran momento para escribir código y verlo en acción en
tus propias paginas PHP.

Paso 12:

Directamente accesando las propiedades - No lo hagas!

No tienes que usar métodos para accesar a las propiedades de los objetos; Puedes
directamente llegar a ellos usando el operador flecha (-> ) y el nombre de la variable.

Por ejemplo: con la propiedad $name (en el objeto $stefan,) tu podrías obtener su valor de la
siguiente manera:

$stefan -> name

Aunque se puede hacer, es considerado una mala practica hacerlo porque puede llevar a un
problema en el camino. Deberías usar métodos como el get_name para obtener el valor –
mas sobre esto luego.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

<?php include("class_lib.php"); ?>


</head>
<body>
<?php
$stefan = new person();
$jimmy = new person;
$stefan->set_name("Stefan Mischook");
$jimmy->set_name("Nick Waddles");
// directly accessing properties in a class is a no-no. echo
"Stefan's full name: " . $stefan->name;
?>
</body>
</html> Paso

13:

Constructores

Todos los objetos tienen un método incorporado llamado un "constructor". Los


constructores le permiten inicializar las propiedades de sus objetos (traducción: dar
valores a las propiedades) cuando instancias (creas) un objeto.

Nota: Si creas una función construct() (si es su opción), PHP automáticamente llamara el
método/función constructor cuando hayas creado el objeto desde su clase.

El método "construct" comienza con dos subrayados ( ) y la palabra 'construct'. El


método constructor se "alimenta" proveyendo una lista de argumentos(como una función)
después del nombre de clase.

<?php
class person {
var $name;
function construct($persons_name) {
$this->name = $persons_name;
}
function set_name($new_name) {
$this->name = $new_name;
}

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

function get_name() { return


$this->name;
}
}
?>

Para el resto del tutorial, voy a detenerme recordándote que:

• Funciones = métodos
• Variables = propiedades
... Ya que esto es un tutorial Orientado a Objetos de PHP usare ahora la terminología OO
(Orientado a Objetos).

Paso 14:

Crear un objeto con un constructor.

Ahora que hemos creado un método constructor, podemos proveer un valor para la
propiedad $name cuando creemos nuestro objeto persona.

Por ejemplo:

$stefan = new person("Stefan Mischook");

Esto nos salva de tener que llamar el método set_name() reduciendo la cantidad de código

Los constructores son comunes y son usados a menudo en PHP, Java, etc.

<?php include("class_lib.php"); ?>


</head>
<body>
<?php
$stefan = new person("Stefan Mischook");
echo "Stefan's full name: " . $stefan->get_name();
?>
</body>
</html>

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Este es un pequeño ejemplo de como los mecanismos incorporados dentro de PHP OO


pueden ahorrar tiempo y reducir la cantidad de código que necesitas escribir.
Menos código significa menos errores.

Paso 15:

Restringiendo el acceso a las propiedades usando "modificadores de acceso".

Uno de los fundamentos principales de la POO es la "encapsulacion". La idea es que tu


puedas crear un código mas limpio y mejor, si tu restringes acceso a las estructuras de datos
(propiedades) en sus objetos. Puedes restringir acceso a las propiedades de la clase usando
algo llamado "modificadores de acceso". Existen 3 modificadores de acceso:

1. Publico
2. Protegido
3. Privado
Publico es el modificador por defecto. Significa que si no lo colocas se asume que es
Publico.

<?php
class person { var
$name; public
$height;
protected $social_insurance; private
$pinn_number;

function
construct($persons_name) {

$this->name = $persons_name;
}
function set_name($new_name) {
$this->name = $new_name;
}
function get_name() { return
$this->name;
}
}
?>

Nota: Cuando declaras una propiedad con la palabra "var" se considera publica.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Paso 16:

Restringiendo acceso a las propiedades. Parte 2.

Cuando declaras una propiedad como "privada" solo la misma clase puede acceder a la
propiedad.

Cuando una propiedad es declarada como "protegida" solo la misma clase y las clases
derivadas de esta clase pueden acceder a la propiedad. Esto tiene que ver con la
herencia... mas de esto luego.

Propiedades declaradas como "publicas" no tienen restricciones de acceso, significa que


cualquiera las puede accesar.

Para ayudar a entender este concepto algo confuso de la POO, intenta el siguiente código y
mira como reacciona PHP. Consejo: Lee los comentarios en el código para mayor
información

<?php include("class_lib.php"); ?>


</head>
<body>
<?php
$stefan = new person("Stefan Mischook");
echo "Stefan's full name: " . $stefan->get_name();
/*
Since $pinn_number was declared private, this line of code will generate an error.
Try it out!
*/
echo "Tell me private stuff: " . $stefan->$pinn_number;
?>
</body>
</html>

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Paso 17:

Restringiendo el acceso a los métodos

Asi como las propiedades, también puedes controlar el acceso a los métodos usando uno
de los tres modificadores de acceso:

1. Publico
2. Protegido
3. Privado
Porque tenemos modificadores de acceso ?

La razón para modificadores de acceso se puede resumir basicamente en el control: Tiene


sentido el hecho de poder controlar como la gente usa las clases.

Las razones para los modificadores de acceso y otras construcciones OO, pueden llegar a ser
difíciles de entender... ya que somos principiantes aquí Asi que date un chance.

Con esto dicho, pienso que podemos resumir y decir que muchas construcciones POO
existen, con la idea de que muchos programadores puedan estar participando en un
proyecto.

<?php
class person { var
$name; public
$height;
protected $social_insurance; private
$pinn_number;
function construct($persons_name) {
$this->name = $persons_name;
}
private function get
return $this->$pinn_number;
}
?>

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Nota: Ya que el método get_pinn_number() es 'privado', el único lugar donde puedes utilizar
este método es en la misma clase – típicamente a través de otro método Si quisieras
llamar/usar este método directamente en tus paginas PHP, tendrías que declararlo "publico".

Nota de Nerd: Nuevamente, es importante (mientras continuamos con el aprendizaje) que


utilices el código tu mismo. Esto hará una diferencia muy grande en el aprendizaje.

Paso 18:

Reutilizando el código a la manera POO: herencia

Herencia es la capacidad fundamental/construcción en POO donde puedes utilizar una clase,


como la base para otra clase... u otras clases.

Porque hacerlo?

Haciendo esto te permite de forma eficientemente reutilizar el código encontrado en la clase


base. Digamos, que quieres crear una nueva clase "employee" (empleado)... ya que
podemos decir que "employee" (empleado) es un tipo de "person" (clase person menciona
anteriormente), ellos compartirían propiedades comunes y métodos

... Tiene algo de sentido?

En este tipo de situación, la herencia puede hacer tu código mas ligero... porque estas
reutilizando el mismo código en dos clases distintas. Pero a diferencia de la forma vieja de
programación en PHP:

1. Tu solo tienes que tipear el código una vez.

2. El código actual siendo reutilizado, puede ser reutilizado en muchas (ilimitadas)


clases
pero es solamente tipeado en un solo lugar... conceptualmente, este es un tipo de include()
de PHP.

Mire el siguiente código de ejemplo:

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

// 'extends' es la palabra clave que extiende la herencia class


employee extends person {
function construct($employee_name) {
}
}

Paso 19:

Reutilizando código con herencia: parte 2

Ya que la clase "employee" (empleado) esta basada en la clase "person" (persona),


"employee" automáticamente obtiene todas las propiedades publicas y protegidas de
"person" así como los métodos de "person".

Nota de Nerd: Nerds deberían decir que 'employee' es un tipo de person (persona). El

código:

// 'extends' es la palabra clave que permite la herencia class


employee extends person {
function construct($employee_name) {
$this->set_name($employee_name);
}
}

Has notado como somos capaces de usar set_name() en "employee", aunque no hemos
declarado ese método en la clase "employee". Esto es porque ya hemos creado set_name()
en la clase "person".

Nota de Nerd: La clase 'person' es llamada (por los nerds) la clase "base" o la clase "padre"
porque es la clase en la cual "employee" esta basada. Esta jerarquía de clase puede llegar a
ser importante a lo largo del camino cuando tus proyectos sean mas complejos.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Paso 20:

Reutilizando código con herencia: parte 3

Como puedes ver en el fragmento de código abajo, podemos llamar a get_name en nuestro
objeto, cortesía de "person".

Este es un clásico ejemplo de como la POO puede reducir el numero de lineas de código (no
tiene que escribir el mismo método dos o mas veces) mientras manteniendo su código
modular y mucho mas fácil de mantener.

<title>OOP in PHP</title>
<?php include("class_lib.php"); ?>
</head>
<body>
<?php
// Using our PHP objects in our PHP pages.
$stefan = new person("Stefan Mischook");
echo "Stefan's full name: " . $stefan->get_name();
$james = new employee("Johnny Fingers"); echo "--->
" . $james->get_name();
?>
</body>
</html>

Paso 21:

Sobrescribiendo métodos

A veces (cuando se usa herencia) puedes necesitar cambiar como un método funciona desde
la clase base. Por ejemplo, digamos el método set_name() en la clase "employee" tiene que
hacer algo diferente a lo que hace en la clase "person". Tu "sobrescribes" la versión de la
clase "person" de set_name() declarándola de nuevo en "employee".

El código:

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

<?php
class person {
// explícitamente agregando propiedades de la clase
// son opcionales pero una Buena practica var
$name;
function construct($persons_name) {
$this->name = $persons_name;
}
public function get_name() { return
$this->name;
}
// métodos protegidos y propiedades restringen el acceso a aquellos
// elementos
protected function set_name($new_name) { if
(name != "Jimmy Two Guns") {
$this->name = strtoupper($new_name);
}
}
}
// 'extends' es la palabra clave que permite la herencia class
employee extends person {
protected function set_name($new_name) { if
($new_name == "Stefan Sucks") {
$this->name = $new_name;
}
}
function construct($employee_name) {
$this->set_name($employee_name);
}
}
?>

Notese como set_name() es diferente en la clase "employee" en comparación con la versión


encontrada en la clase padre: "person".

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Paso 22:

Sobrescribiendo métodos: parte 2

Algunas veces necesitaras accesar a la versión de tu clase base de un método que


sobrescribistes en la clase derivada (a veces llamada "clase hija").

En nuestro ejemplo. Nosotros sobrescribimos el método set_name() en la clase "employee".

Ahora he usado este código:

person::set_name($new_name);

... para accesar la clase padre (person) del método set_name(). El

código:

<?php
class person {
// agregando explícitamente propiedades de clase son opcionales
// pero es una Buena practica var
$name;
function construct($persons_name) {
$this->name = $persons_name;
}
public function get_name() { return
$this->name;
}
// métodos protegidos y propiedades restringen el acceso a
// aquellos elementos
protected function set_name($new_name) { if
(name != "Jimmy Two Guns") {
$this->name = strtoupper($new_name);
}
}
}
// 'extends' es la palabra clave que permite la herencia class
employee extends person {

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

protected function set_name($new_name) { if


($new_name == "Stefan Sucks") {
$this->name = $new_name;
}
else if($new_name == "Johnny Fingers") { person::set_name($new_name);
}
}
function construct($employee_name) {
$this->set_name($employee_name);
}
}
?>

Paso 23:

Sobrescribiendo métodos: parte 3

Usando :: permite específicamente nombrar la clase donde quieres que PHP busque un
método – "person::set_name()" dice a PHP que busque set_name() en la clase "person".

También existe un atajo si solo quieres referir a la clase padre actual: Usando la palabra
reservada "parent".

El código:

<?php
class person {
// explícitamente agregar propiedades de las clases es opcional
// pero buena practica var
$name;
function construct($persons_name) {

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

$this->name = $persons_name;
}
public function get_name() { return
$this->name;
}
//métodos protegidos restringen el acceso a aquellos elementos

protected function set_name($new_name) { if


(name != "Jimmy Two Guns") {
$this->name = strtoupper($new_name);
}
}
}
// 'extends' es la palabra clave que habilita la herencia class
employee extends person {
protected function set_name($new_name) { if
($new_name == "Stefan Sucks") {
$this->name = $new_name;
}
else if($new_name == "Johnny Fingers") {
parent::set_name($new_name);
}
}

function
construct($employee_name) {

$this->set_name($employee_name);
}
}
?>

Comentarios Finales

Solo hemos tocado lo básico de PHP OO. Pero deberías tener suficiente información para
sentirse cómodo yendo hacia adelante.

Recuerda que la mejor manera de tener esto "bien grabado" es escribiendo el código por
diversión y practicando.

Yo sugeriría crear 10 objetos simples que hagan cosas simples, y entonces usar estos
objetos en paginas PHP actuales. Una vez que hayas hecho eso, te sentirás muy cómodo
con los objetos.
INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Porque aprender POO en PHP. Otra punto de vista.

Para gente nueva a POO y que están mas "cómodos" con el PHP por procedimiento, podrán
estar preguntándose porque deberían molestarse en aprender conceptos de objetos ...
Porque tomarse la molestia de aprender?

El mundo de PHP:

El PHP se esta moviendo en la direccion de POO. Por ejemplo, mucha extensiones


importantes del PHP como PEAR y Smarty son basadas en OO. Asi que realmente
entender y usar estos frameworks propiamente, necesitaras entender PHP orientado a
objetos.

Las ventajas practicas/funcionales:

Para pequeños proyectos, usar PHP orientado a objetos podría ser demasiado. Esto
dicho, el PHP orientado a objetos realmente comienza a brillar cuando los proyectos se
hacen mas complejos, y cuando tu tienes mas de una persona haciendo el programa.

Por ejemplo:

Si encuentras que tienes, digamos 10, 20 o mas funciones y encuentras que algunas de
las funciones están haciendo cosas similares... es tiempo de considerar empaquetar las
cosas en objetos usando POO.

POO y tu carrera como programador:

POO es la manera moderna del desarrollo de software y todos los lenguajes mayores
(Java, PERL, PHP, C#, Ruby) usan este método de programación Como
desarrollador/programador de software, solo tiene sentido (en términos de carrera,)
mantener tus habilidades actualizadas.

Mas allá de hacerte un programador de PHP de mayor valor, entendiendo POO en PHP te
dará conocimientos (conocimientos de POO) que tu seras capaz de llevar contigo a otros
lenguajes.

... Cuando aprendas POO en PHP, aprenderás programación orientada a objetos para
cualquier lenguajes basado en OO.

Encontraras con tiempo que crear proyectos PHP basados en objetos, hará tu vida de
programador mas fácil Como un bonus adicional, pronto desarrollaras tu propia colección
de objetos reutilizables, que te servirán para otros proyectos.
Finalmente, también encontraras que el PHP basado en POO es mas fácil de mantener y
actualizar.

INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

Retos en POO:

PHP OO presenta algunos retos en cuanto comienzas porque necesitas aprender a pensar
acerca de tus proyectos PHP de una manera diferente: necesitaras conceptualizar el
proyecto en términos de objetos.

Mas detalles...

Una vía común de comenzar un proyecto orientado a objetos es comenzar dibujando un


simple diagrama de tus objetos. Mientras empiezas a trabajar con diagramas orientados a
objetos, encontraras que ellos te ayudaran en hacer el desarrollo de proyectos PHP basados
en POO muchos mas fáciles

Aquí tienes unos cuantos consejos acerca de diagramas de dibujos de objeto.

• Use un papel y un lápiz


• Dibuja cajas que representen cada objeto.
• En aquellas cajas, crea una lista de sus métodos y propiedades.
• Usa flechas y lineas entre cajas para denotar relaciones (padre – hijo) entre objetos.

Asi que si has estado esperando para saltar en el mundo de PHP OO, ahora es el mejor
momento para hacerlo.

Conclusión.

Pese a los grandes ventajas que ofrece la programación orientada a objetos gracias a
características propias como la herencia y la encapsulación, aun quedan problemas por
solucionar. No hay un lenguaje dominante que elimine la dependencia que existe entre unos
y otros, y las definiciones de las clases pueden resultar erróneas después de meses de
trabajo. Por otro lado, todos los elementos del programa deben de ser vistos como objetos y
la transición a este tipo de programación hace que sea necesario el reciclaje de muchos de
los programadores.

Aun así, las líneas de investigación no se detienen y empieza a hablarse de programación


orientada a aspectos (POA). Aunque es todavía un paradigma en estado embrionario, cada
vez es mas gente la que se interesa por ella.

Bibliografía.

http://es.wikipedia.org/wiki/Orientado_a_objetos

http://www.monografias.com/trabajos/objetos/objetos.shtml
INGINIERIA WEB I
UNIVERSIDAD JOSE CARLOS MARIATEGUI

http://www.desarrolloweb.com/articulos/499.php

GRACIAS

INGINIERIA WEB I

Potrebbero piacerti anche