SlideShare una empresa de Scribd logo
1 de 10
http://www.webestilo.com/php/articulo.phtml?art=27
PHP orientado a objetos. Parte I
La mayoría de los lenguajes de programación modernos son orientados a objetos
( abreviado OO ) o en su defecto se aproximan mucho a éstos permitiendo algunas de sus
características como es el caso de PHP.
La programación OO principalmente hace uso de clases, objetos, relaciones, instancias,
propiedades y métodos.
Objetos y clases
Cuando hablamos de software OO los objetos casi siempre son elementos físicos, como
puede ser un cliente, proveedor, etc. o elementos conceptuales que existen en el entorno
software, por ejemplo un objeto encargado del mantenimiento de archivos. El objetivo es
representar a éstos elementos de la vida real y a los conceptuales como unidades de
software.
La programación OO esta pensada para construir objetos que contienen atributos y
operaciones de manera que cubran nuestras necesidades. Los atributos son variables que
contienen información del estado de un objeto. Y las operaciones también conocidas como
métodos, funciones y acciones realizan modificaciones del propio objeto o realizan alguna
acción externa a éste.
Una de las principales ventajas de la programación OO es el concepto de encapsulación,
conocido también como protección de datos, mediante el cual solo se pueden modificar los
datos de un objeto accediendo a través de sus métodos u operaciones (interfaz del objeto).
Nunca se pueden modificar directamente desde la aplicación principal.
La funcionalidad de un objeto esta sujeta a los datos que este maneja, una ventaja de usar
objetos es que podemos modificar la funcionalidad de éste, añadir mejoras o corregir
errores sin necesidad de cambiar su interfaz. Ya que en caso contrario un proyecto estaría
sujeto a un mayor número de fallos y los cambios serían más costosos.
En algunas áreas de la programación de aplicaciones Web el uso de la programación OO
está desestimada, usándose una metodología estructurada basada en funciones, esto es
debido a que determinados proyectos no son lo suficientemente extensos como para
aplicarles una metodología OO.
En la programación OO los objetos son únicos y son instancias a una clase determinada. En
principio se define la clase con los atributos y métodos correspondientes y luego se crea el
objeto que esta basado en una determinada clase (esto se conoce como instancia). Se puede
comparar a un objeto con una variable y la clase sería un tipo de dato definido por nosotros.
Cómo crear clases, atributos y operaciones en PHP
Hasta ahora hemos hablado de las clases de una forma conceptual, a continuación veremos
como se crean, para crear una clase en PHP usaremos la palabra reservada class.
La estructura mínima de una clase es la siguiente:
class NombreClase {
}
Para que una clase sea útil, necesita atributos y operaciones. Podemos crear atributos como
si de variables se trataran, con la palabra reservada var
class NombreClase {
var $atributo1;
var $atributo2;
}
Podemos crear métodos declarando funciones dentro de la definición de la clase, el
siguiente código crea una clase llamada NombreClase con dos operaciones que no hacen
nada. A metodo1 no le pasamos ningún parámetro y a metodo2 le pasamos dos parámetros.
class NombreClase {
function metodo1() {
}
function metodo2($param1, $param2) {
}
}
PHP orientado a objetos. Parte II
Qué es el constructor de una clase
Las clases soportan un tipo de función especial que se conoce como constructor. El
constructor es llamado cuando se crea el objeto. Normalmente utiliza para inicializar tareas
como: asignación de valores a determinados atributos, crear nuevos objetos necesarios para
el correcto funcionamiento de el objeto, etc.
El constructor se declara de la misma forma que los métodos, lo único que debemos tener
en cuenta es que debe tener el mismo nombre que la clase. A pesar de que nosotros
podemos llamar a el constructor, su principal propósito es ser llamado automáticamente
cuando un objeto es creado. A continuación veremos como se declara el constructor de una
clase:
class NombreClase {
function NombreClase($param) {
echo "Constructor llamado con el parámetro $param";
}
}
Cómo usar objetos, instanciar una clase
Después de haber declarado una clase, ya podemos usarla creando un objeto que es una
instancia a esa clase como ya se ha mencionado anteriormente. Es muy importante que esto
quede claro, los objetos son instancias a una clase, por lo tanto cada objeto es único.
En php creamos un objeto usando la palabra reservada new. También debemos indicar a
que clase va a instanciar el objeto que creemos y pasarle los parámetros (si los requiere) al
constructor, en el siguiente código vamos a ver un ejemplo de esto, para ello tomamos
como referencia la clase anterior NombreClase:
$a = new NombreClase("Primero");
$b = new NombreClase("Segundo");
$c = new NombreClase();
Como resultado de este código vemos que el constructor es llamado cada vez que se crea el
objeto, y vemos que los objetos son únicos aunque sean instancias de la misma clase, el
resultado es el siguiente:
Constructor llamado con el parámetro Primero
Constructor llamado con el parámetro Segundo
Constructor llamado con el parámetro
Cómo usar los atributos de una clase
Una clase, tiene un puntero especial al que podemos referenciar como $this. Si nuestra
clase tiene un atributo llamado $atributo, podemos hacer referencia a este desde nuestra
clase (métodos) de la siguiente forma $this->atributo, a continuación podemos ver el
código de ejemplo del acceso a un atributo de clase desde un método de la propia clase.
class NombreClase {
var $atributo;
function metodo($param) {
$this->atributo = $param;
echo $this->atributo;
}
}
Algunos lenguajes permiten limitar el acceso desde fuera a los atributos de una clase
declarándolos como privados o protegidos ("private", "protected"). PHP no soporta esta
característica y todos atributos y métodos pueden ser vistos desde fuera de la clase, lo que
quiere decir que siempre son públicos.
Podemos realizar la misma acción que anteriormente desde fuera de la clase, usando esta
sintaxis.
NombreClase {
var $atributo;
}
$a = new NombreClase();
$a->atributo = "valor";
echo $a->atributo;
Las sentencias anteriores están permitidas en PHP, pero no es una práctica recomendable
acceder directamente a los atributos de una clase desde fuera de ésta. Como se ha
comentado anteriormente una de las ventajas de la POO es que permite realizar
encapsulación por esta razón aunque PHP no permita ocultar los atributos o métodos de una
clase, nosotros deberíamos no acceder directamente a ellos, para diferenciarlos de los
públicos es conveniente también poner "m_" (de miembro lo cual significa que solo serán
usados dentro de la clase) delante de los nombres de métodos y atributos a los cuales no se
quiera acceder directamente desde fuera de la clase.
Para los atributos que queramos acceder directamente desde fuera de la clase, deberíamos
escribir funciones de acceso, tanto para establecer como para coger valores. Deberíamos
tener un código como el siguiente:
class NombreClase {
var $atributo;
function get_atributo() { //devuelve el valor de atributo
return $this->atributo;
}
function set_atributo($valor_nuevo) { //establece el valor de atributo
$this->atributo = $valor_nuevo;
}
}
La finalidad de hacer esto, es clarificar el código y tener una sección de código encargada
de acceder a los atributos para mantener la encapsulación, y que no sean accedidos
directamente. Además si seguimos estas prácticas aumentará la calidad de nuestro software
ya que podremos introducir comprobaciones de datos, como rangos, valores permitidos,
etc. Veamos un ejemplo de validación de datos a la hora de asignar un valor a atributo
mediante el método set_atributo:
function set_atributo($valor_nuevo) {
if ($valor_nuevo > 100) {
$this->atributo = $valor_nuevo;
}
}
En el código superior vemos que cuando queremos asignar a atributo valores inferiores a
100 no nos deja, y atributo seguirá manteniendo su valor.
Cómo usar los métodos de una clase
Los métodos de una clase se pueden llamar de la misma forma que se llaman a los
atributos, supongamos que tenemos la siguiente clase:
class nombreClase {
function metodoa() {
return "Has llamado al método A";
}
function metodob($parametro1) {
return "Método B llamado con parámetro: ".$paramtro1;
}
}
Creamos un objeto de la case nombreClase con el nombre $obj de la siguiente forma:
$obj = new nombreClase();
Los métodos de un objeto, son llamados de la misma forma que se llaman a funciones
normales, pasándoles como es el caso de metodob el parámetro que necesiten. Como los
métodos son funciones que pertenecen a un objeto, deberemos indicar en la llamada el
objeto que los incluye, la forma de llamar a un método es idéntica a como llamamos a los
atributos de un objeto.
$obj->metodoa();
$obj->metodob("parámetro que pasamos");
Si nuestras operaciones, devuelven algún valor, lo capturamos asignándoselo a una
variable, podemos ver el siguiente ejemplo
$txt_retorno = $obj->metodob("Hola");
$txt_retorno contendrá la cadena de texto:
"Metodo B llamado con parámetro: Hola"
PHP orientado a objetos. Parte y III
Qué es la Herencia en PHP y como implementarla
Como su nombre indica el concepto de herencia se aplica cuando creamos una clase, que va
a heredar los métodos y atributos de una ya definida, entonces la clase que hemos creado es
una subclase. Para que una clase sea subclase de otra ya creada deberemos usar la palabra
reservada extends en el siguiente código podremos ver como creamos una clase llamada
SubClaseA que heredará los métodos y atributos de una clase definida con anterioridad
llamada ClaseA.
class SubClaseA extends ClaseA {
var $atributo2;
function operacion2() {
}
}
Tenemos la clase ClaseA que es definida de la siguiente forma:
Class ClaseA {
var $atributo1;
function operacion1(){
}
}
Si creamos un objeto de la clase SubClaseA este heredará todos los métodos de la clase
ClaseA, por lo tanto el siguiente código es válido:
$x = new SubClaseA();
$x->operacion1();
$x->atributo1 = 100;
$x->operacion2();
$x->atributo2 = 200;
Como podemos observar aunque declaremos un objeto de la clase SubClaseA, al ser una
clase extendida de ClaseA podemos hacer uso de todos los métodos y atributos definidos en
ClaseA como si estuvieran contenidos en SubClaseA.
Debemos tener en cuenta que la herencia solo trabaja en una dirección, la subclase o clase
hija hereda las características de su clase padre o superclase, pero la clase padre no posee
las características de la hija. Para el caso anterior ClaseA no tendría atributo2 ni metodo2();
Como sobrescribir métodos y atributos
Como hemos visto anteriormente, una subclase declara atributos nuevos y operaciones
sobre una superclase. Es posible y en muchos casos útil sobrescribir las mismas
operaciones o atributos declarados en la superclase. Esto se hace para dar a un atributo un
valor diferente en la subclase que el que tiene en la superclase o en el caso de las
operaciones para cambiar la funcionalidad de estas. Veamos un ejemplo, por ejemplo si
tenemos la clase A:
class A {
var $atributo = 'valor inicial'
function operación() {
echo 'Clase A:<br>';
echo 'El valor de $atributo es $this->atributo<br>';
}
}
Queremos crear una subclase B y alterar el valor de atributo y la funcionalidad de
operación de la clase A, entonces escribimos:
Class B extends A {
var $atributo = 'valor cambiado';
function operación() {
echo 'Clase B:<br>';
echo 'El valor de $atributo ahora es $this->atributo<br>';
}
}
Como podemos observar hemos definido una variable y una operación en B con el mismo
nombre que tenían en A.
Como se ha comentado anteriormente aunque declaremos B no afecta a la definición de A,
y si creamos un objeto de la superclase A esté mantendrá sus valores originales. Solo
sobrescribiremos los valores y funcionalidad de A cuando creemos un objeto de la clase B.
A diferencia de otros lenguajes OO, PHP no nos permitirá sobrescribir una función o
atributo y poder llamar a los valores de la clase padre.
La herencia puede tener muchas capas de profundidad, por ejemplo podemos tener una
clase C que es subclase de B y está última ser subclase de A, la subclase C heredará y
sobrescribirá aquellos atributos y métodos de sus clases padres, en este caso A y B.
¿Soporta PHP la herencia múltiple?
Algunos lenguajes OO soportan herencia múltiple, esto significa que una subclase puede
heredar de varias clases padres. PHP no permite esto y una subclase solo puede heredar de
una clase padre, sin embargo en PHP no hay ningún tipo de restricción en cuanto a el
número de subclases que pueden heredar de una misma clase padre o superclase.
Qué es el polimorfismo y como implementarlo
Cualquier lenguaje de programación orientado a objetos debe soportar el polimorfismo,
esto significa que clases diferentes tendrán un comportamiento distinto para la misma
operación. Esto lo veremos más claro con el siguiente ejemplo.
Supongamos que tenemos dos clases distintas coche y ciclomotor. Ambas tienen sus
propios métodos de movimiento, éstos tienen diferentes comportamientos, pero su nombre
es el mismo
class coche {
function avanza() {
}
function para() {
}
function girar_derecha() {
}
}
class ciclomotor {
function avanza() {
}
function para() {
}
function girar_derecha() {
}
}
Como podemos observar, ambas clases tienen los mismos métodos, supongamos ahora que
tenemos otra clase que controla el movimiento de todos los vehículos, es aquí donde entra
en juego el polimorfismo, que dependiendo del objeto que tratemos actuará de una forma u
otra el método al que llamamos.
class movimiento {
function mover_adelante($obj) {
$obj->avanza();
}
}
Supongamos que queremos mover cualquier vehículo hacia adelante entonces haríamos:
$obj_coche = new coche();
$obj_ciclomotor = new ciclomotor();
$obj_movimiento = new movimiento();
// con esta sentencia el coche avanzaria hacia adelante.
$obj_movimiento->mover_adelante($obj_coche);
// con esta sentencia el ciclomotor avanzaría hacia adelante.
$obj_movimiento->mover_adelante($obj_ciclomotor);
en juego el polimorfismo, que dependiendo del objeto que tratemos actuará de una forma u
otra el método al que llamamos.
class movimiento {
function mover_adelante($obj) {
$obj->avanza();
}
}
Supongamos que queremos mover cualquier vehículo hacia adelante entonces haríamos:
$obj_coche = new coche();
$obj_ciclomotor = new ciclomotor();
$obj_movimiento = new movimiento();
// con esta sentencia el coche avanzaria hacia adelante.
$obj_movimiento->mover_adelante($obj_coche);
// con esta sentencia el ciclomotor avanzaría hacia adelante.
$obj_movimiento->mover_adelante($obj_ciclomotor);

Más contenido relacionado

La actualidad más candente

Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Renny Batista
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visualLibertad25
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosPatricio Abad
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Josue Lara Reyes
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosguest160f88
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetoslindacajaperuiz
 
Tarea 5
Tarea 5Tarea 5
Tarea 5ar qb
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IEKaren Olan
 
Poo Java
Poo JavaPoo Java
Poo Javaeccutpl
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Whaleejaa Wha
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOAnabel Jaramillo
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetoschutas666
 

La actualidad más candente (20)

Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visual
 
ProgramacióN Orientada A Objetos
ProgramacióN Orientada A ObjetosProgramacióN Orientada A Objetos
ProgramacióN Orientada A Objetos
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Qué es la poo
Qué es la pooQué es la poo
Qué es la poo
 
Leguaje de programacion C#
Leguaje de programacion C#Leguaje de programacion C#
Leguaje de programacion C#
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Conceptos Basicos de POO
Conceptos Basicos de POOConceptos Basicos de POO
Conceptos Basicos de POO
 
Conceptos basicos POO
Conceptos basicos POOConceptos basicos POO
Conceptos basicos POO
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Tarea 5
Tarea 5Tarea 5
Tarea 5
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IE
 
Poo Java
Poo JavaPoo Java
Poo Java
 
Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.Elementos básicos de la programación orientada a objetos.
Elementos básicos de la programación orientada a objetos.
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Unidad1 y 2
Unidad1 y 2Unidad1 y 2
Unidad1 y 2
 

Destacado

Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -
Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -
Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -Colegio Camilo Henríquez
 
word
wordword
wordIEFP
 
Literatura ridnogo kraju
Literatura ridnogo krajuLiteratura ridnogo kraju
Literatura ridnogo krajuInnaPashchenko
 
dockerはじめました。 GDG京都 2014年忘れ勉強会 LT
dockerはじめました。 GDG京都 2014年忘れ勉強会 LTdockerはじめました。 GDG京都 2014年忘れ勉強会 LT
dockerはじめました。 GDG京都 2014年忘れ勉強会 LTSatoshi Noda
 
calculadora
calculadoracalculadora
calculadoraIEFP
 
Leçon 9 platon la théorie de l'âme
Leçon 9 platon   la théorie de l'âmeLeçon 9 platon   la théorie de l'âme
Leçon 9 platon la théorie de l'âmealinslide
 
Alumnos ayudantes blog
Alumnos ayudantes    blogAlumnos ayudantes    blog
Alumnos ayudantes blogalarorduque
 
Palabras que sanan el alma plena-mente.com.ar 7
Palabras que sanan el alma  plena-mente.com.ar 7Palabras que sanan el alma  plena-mente.com.ar 7
Palabras que sanan el alma plena-mente.com.ar 7Xavi Gasset
 
CollegesWales' International Work
CollegesWales' International WorkCollegesWales' International Work
CollegesWales' International WorkSylvia Davies MCIPR
 

Destacado (14)

Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -
Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -
Informativo n°39 -_2°_basico_b_-_12_de_diciembre_de_2014 -
 
Jay cpd
Jay cpdJay cpd
Jay cpd
 
word
wordword
word
 
Literatura ridnogo kraju
Literatura ridnogo krajuLiteratura ridnogo kraju
Literatura ridnogo kraju
 
dockerはじめました。 GDG京都 2014年忘れ勉強会 LT
dockerはじめました。 GDG京都 2014年忘れ勉強会 LTdockerはじめました。 GDG京都 2014年忘れ勉強会 LT
dockerはじめました。 GDG京都 2014年忘れ勉強会 LT
 
tim-ihms
tim-ihmstim-ihms
tim-ihms
 
calculadora
calculadoracalculadora
calculadora
 
Leçon 9 platon la théorie de l'âme
Leçon 9 platon   la théorie de l'âmeLeçon 9 platon   la théorie de l'âme
Leçon 9 platon la théorie de l'âme
 
Alumnos ayudantes blog
Alumnos ayudantes    blogAlumnos ayudantes    blog
Alumnos ayudantes blog
 
Adidas
AdidasAdidas
Adidas
 
Ley 5787(Santiago del Estero)
Ley 5787(Santiago del Estero)Ley 5787(Santiago del Estero)
Ley 5787(Santiago del Estero)
 
Palabras que sanan el alma plena-mente.com.ar 7
Palabras que sanan el alma  plena-mente.com.ar 7Palabras que sanan el alma  plena-mente.com.ar 7
Palabras que sanan el alma plena-mente.com.ar 7
 
Wellington
WellingtonWellington
Wellington
 
CollegesWales' International Work
CollegesWales' International WorkCollegesWales' International Work
CollegesWales' International Work
 

Similar a Php orientado a_objetos

Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosAntonio Palomares Sender
 
Programacion orientada-a-objetos
Programacion orientada-a-objetosProgramacion orientada-a-objetos
Programacion orientada-a-objetosDon Augusto
 
modularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxmodularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxjavierccallo
 
PresentacióN1
PresentacióN1PresentacióN1
PresentacióN1Rokr02
 
Programación ii presentación tema 5
Programación ii presentación tema 5Programación ii presentación tema 5
Programación ii presentación tema 5Joel Mieses
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......SaulSalinasNeri
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos Marielena Lujano
 
Cesar adrian barrios alarcon unidad 2
Cesar adrian barrios alarcon      unidad 2       Cesar adrian barrios alarcon      unidad 2
Cesar adrian barrios alarcon unidad 2 Cesar Mcfly
 
Conceptos adicionales a la programación orientada a objetos con JavaScript
Conceptos adicionales a la programación orientada a objetos con JavaScriptConceptos adicionales a la programación orientada a objetos con JavaScript
Conceptos adicionales a la programación orientada a objetos con JavaScriptFrancisco Javier Arce Anguiano
 

Similar a Php orientado a_objetos (20)

Guia poo php
Guia poo phpGuia poo php
Guia poo php
 
Presentacion de clases en c#
Presentacion de clases en c#Presentacion de clases en c#
Presentacion de clases en c#
 
Framework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetosFramework .NET 3.5 07 Programación orientada a objetos
Framework .NET 3.5 07 Programación orientada a objetos
 
Programacion orientada-a-objetos
Programacion orientada-a-objetosProgramacion orientada-a-objetos
Programacion orientada-a-objetos
 
modularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxmodularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptx
 
PresentacióN1
PresentacióN1PresentacióN1
PresentacióN1
 
Php orientado a objetos, Ronald Nina
Php orientado a objetos, Ronald NinaPhp orientado a objetos, Ronald Nina
Php orientado a objetos, Ronald Nina
 
Programación ii presentación tema 5
Programación ii presentación tema 5Programación ii presentación tema 5
Programación ii presentación tema 5
 
Clase
ClaseClase
Clase
 
Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......Programación_del_lado_del_servidor......
Programación_del_lado_del_servidor......
 
Datos previos
Datos previosDatos previos
Datos previos
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
Datos Previos
Datos PreviosDatos Previos
Datos Previos
 
Benita ppp unidad 1
Benita ppp unidad 1Benita ppp unidad 1
Benita ppp unidad 1
 
Lenguaje de Programación Orientada a Objetos
Lenguaje  de  Programación  Orientada  a Objetos Lenguaje  de  Programación  Orientada  a Objetos
Lenguaje de Programación Orientada a Objetos
 
Odaliz presentacion
Odaliz presentacionOdaliz presentacion
Odaliz presentacion
 
Cesar adrian barrios alarcon unidad 2
Cesar adrian barrios alarcon      unidad 2       Cesar adrian barrios alarcon      unidad 2
Cesar adrian barrios alarcon unidad 2
 
Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
Programacion
ProgramacionProgramacion
Programacion
 
Conceptos adicionales a la programación orientada a objetos con JavaScript
Conceptos adicionales a la programación orientada a objetos con JavaScriptConceptos adicionales a la programación orientada a objetos con JavaScript
Conceptos adicionales a la programación orientada a objetos con JavaScript
 

Php orientado a_objetos

  • 1. http://www.webestilo.com/php/articulo.phtml?art=27 PHP orientado a objetos. Parte I La mayoría de los lenguajes de programación modernos son orientados a objetos ( abreviado OO ) o en su defecto se aproximan mucho a éstos permitiendo algunas de sus características como es el caso de PHP. La programación OO principalmente hace uso de clases, objetos, relaciones, instancias, propiedades y métodos. Objetos y clases Cuando hablamos de software OO los objetos casi siempre son elementos físicos, como puede ser un cliente, proveedor, etc. o elementos conceptuales que existen en el entorno software, por ejemplo un objeto encargado del mantenimiento de archivos. El objetivo es representar a éstos elementos de la vida real y a los conceptuales como unidades de software. La programación OO esta pensada para construir objetos que contienen atributos y operaciones de manera que cubran nuestras necesidades. Los atributos son variables que contienen información del estado de un objeto. Y las operaciones también conocidas como métodos, funciones y acciones realizan modificaciones del propio objeto o realizan alguna acción externa a éste. Una de las principales ventajas de la programación OO es el concepto de encapsulación, conocido también como protección de datos, mediante el cual solo se pueden modificar los datos de un objeto accediendo a través de sus métodos u operaciones (interfaz del objeto). Nunca se pueden modificar directamente desde la aplicación principal. La funcionalidad de un objeto esta sujeta a los datos que este maneja, una ventaja de usar objetos es que podemos modificar la funcionalidad de éste, añadir mejoras o corregir errores sin necesidad de cambiar su interfaz. Ya que en caso contrario un proyecto estaría sujeto a un mayor número de fallos y los cambios serían más costosos. En algunas áreas de la programación de aplicaciones Web el uso de la programación OO está desestimada, usándose una metodología estructurada basada en funciones, esto es debido a que determinados proyectos no son lo suficientemente extensos como para aplicarles una metodología OO.
  • 2. En la programación OO los objetos son únicos y son instancias a una clase determinada. En principio se define la clase con los atributos y métodos correspondientes y luego se crea el objeto que esta basado en una determinada clase (esto se conoce como instancia). Se puede comparar a un objeto con una variable y la clase sería un tipo de dato definido por nosotros. Cómo crear clases, atributos y operaciones en PHP Hasta ahora hemos hablado de las clases de una forma conceptual, a continuación veremos como se crean, para crear una clase en PHP usaremos la palabra reservada class. La estructura mínima de una clase es la siguiente: class NombreClase { } Para que una clase sea útil, necesita atributos y operaciones. Podemos crear atributos como si de variables se trataran, con la palabra reservada var class NombreClase { var $atributo1; var $atributo2; } Podemos crear métodos declarando funciones dentro de la definición de la clase, el siguiente código crea una clase llamada NombreClase con dos operaciones que no hacen nada. A metodo1 no le pasamos ningún parámetro y a metodo2 le pasamos dos parámetros. class NombreClase { function metodo1() { } function metodo2($param1, $param2) { } }
  • 3. PHP orientado a objetos. Parte II Qué es el constructor de una clase Las clases soportan un tipo de función especial que se conoce como constructor. El constructor es llamado cuando se crea el objeto. Normalmente utiliza para inicializar tareas como: asignación de valores a determinados atributos, crear nuevos objetos necesarios para el correcto funcionamiento de el objeto, etc. El constructor se declara de la misma forma que los métodos, lo único que debemos tener en cuenta es que debe tener el mismo nombre que la clase. A pesar de que nosotros podemos llamar a el constructor, su principal propósito es ser llamado automáticamente cuando un objeto es creado. A continuación veremos como se declara el constructor de una clase: class NombreClase { function NombreClase($param) { echo "Constructor llamado con el parámetro $param"; } } Cómo usar objetos, instanciar una clase Después de haber declarado una clase, ya podemos usarla creando un objeto que es una instancia a esa clase como ya se ha mencionado anteriormente. Es muy importante que esto quede claro, los objetos son instancias a una clase, por lo tanto cada objeto es único. En php creamos un objeto usando la palabra reservada new. También debemos indicar a que clase va a instanciar el objeto que creemos y pasarle los parámetros (si los requiere) al constructor, en el siguiente código vamos a ver un ejemplo de esto, para ello tomamos como referencia la clase anterior NombreClase: $a = new NombreClase("Primero"); $b = new NombreClase("Segundo");
  • 4. $c = new NombreClase(); Como resultado de este código vemos que el constructor es llamado cada vez que se crea el objeto, y vemos que los objetos son únicos aunque sean instancias de la misma clase, el resultado es el siguiente: Constructor llamado con el parámetro Primero Constructor llamado con el parámetro Segundo Constructor llamado con el parámetro Cómo usar los atributos de una clase Una clase, tiene un puntero especial al que podemos referenciar como $this. Si nuestra clase tiene un atributo llamado $atributo, podemos hacer referencia a este desde nuestra clase (métodos) de la siguiente forma $this->atributo, a continuación podemos ver el código de ejemplo del acceso a un atributo de clase desde un método de la propia clase. class NombreClase { var $atributo; function metodo($param) { $this->atributo = $param; echo $this->atributo; } } Algunos lenguajes permiten limitar el acceso desde fuera a los atributos de una clase declarándolos como privados o protegidos ("private", "protected"). PHP no soporta esta característica y todos atributos y métodos pueden ser vistos desde fuera de la clase, lo que quiere decir que siempre son públicos. Podemos realizar la misma acción que anteriormente desde fuera de la clase, usando esta sintaxis. NombreClase { var $atributo; } $a = new NombreClase(); $a->atributo = "valor"; echo $a->atributo; Las sentencias anteriores están permitidas en PHP, pero no es una práctica recomendable acceder directamente a los atributos de una clase desde fuera de ésta. Como se ha comentado anteriormente una de las ventajas de la POO es que permite realizar encapsulación por esta razón aunque PHP no permita ocultar los atributos o métodos de una clase, nosotros deberíamos no acceder directamente a ellos, para diferenciarlos de los públicos es conveniente también poner "m_" (de miembro lo cual significa que solo serán
  • 5. usados dentro de la clase) delante de los nombres de métodos y atributos a los cuales no se quiera acceder directamente desde fuera de la clase. Para los atributos que queramos acceder directamente desde fuera de la clase, deberíamos escribir funciones de acceso, tanto para establecer como para coger valores. Deberíamos tener un código como el siguiente: class NombreClase { var $atributo; function get_atributo() { //devuelve el valor de atributo return $this->atributo; } function set_atributo($valor_nuevo) { //establece el valor de atributo $this->atributo = $valor_nuevo; } } La finalidad de hacer esto, es clarificar el código y tener una sección de código encargada de acceder a los atributos para mantener la encapsulación, y que no sean accedidos directamente. Además si seguimos estas prácticas aumentará la calidad de nuestro software ya que podremos introducir comprobaciones de datos, como rangos, valores permitidos, etc. Veamos un ejemplo de validación de datos a la hora de asignar un valor a atributo mediante el método set_atributo: function set_atributo($valor_nuevo) { if ($valor_nuevo > 100) { $this->atributo = $valor_nuevo; } } En el código superior vemos que cuando queremos asignar a atributo valores inferiores a 100 no nos deja, y atributo seguirá manteniendo su valor. Cómo usar los métodos de una clase Los métodos de una clase se pueden llamar de la misma forma que se llaman a los atributos, supongamos que tenemos la siguiente clase: class nombreClase { function metodoa() { return "Has llamado al método A"; } function metodob($parametro1) { return "Método B llamado con parámetro: ".$paramtro1; } }
  • 6. Creamos un objeto de la case nombreClase con el nombre $obj de la siguiente forma: $obj = new nombreClase(); Los métodos de un objeto, son llamados de la misma forma que se llaman a funciones normales, pasándoles como es el caso de metodob el parámetro que necesiten. Como los métodos son funciones que pertenecen a un objeto, deberemos indicar en la llamada el objeto que los incluye, la forma de llamar a un método es idéntica a como llamamos a los atributos de un objeto. $obj->metodoa(); $obj->metodob("parámetro que pasamos"); Si nuestras operaciones, devuelven algún valor, lo capturamos asignándoselo a una variable, podemos ver el siguiente ejemplo $txt_retorno = $obj->metodob("Hola"); $txt_retorno contendrá la cadena de texto: "Metodo B llamado con parámetro: Hola" PHP orientado a objetos. Parte y III Qué es la Herencia en PHP y como implementarla Como su nombre indica el concepto de herencia se aplica cuando creamos una clase, que va a heredar los métodos y atributos de una ya definida, entonces la clase que hemos creado es una subclase. Para que una clase sea subclase de otra ya creada deberemos usar la palabra reservada extends en el siguiente código podremos ver como creamos una clase llamada SubClaseA que heredará los métodos y atributos de una clase definida con anterioridad llamada ClaseA. class SubClaseA extends ClaseA { var $atributo2; function operacion2() { } } Tenemos la clase ClaseA que es definida de la siguiente forma: Class ClaseA { var $atributo1; function operacion1(){ } }
  • 7. Si creamos un objeto de la clase SubClaseA este heredará todos los métodos de la clase ClaseA, por lo tanto el siguiente código es válido: $x = new SubClaseA(); $x->operacion1(); $x->atributo1 = 100; $x->operacion2(); $x->atributo2 = 200; Como podemos observar aunque declaremos un objeto de la clase SubClaseA, al ser una clase extendida de ClaseA podemos hacer uso de todos los métodos y atributos definidos en ClaseA como si estuvieran contenidos en SubClaseA. Debemos tener en cuenta que la herencia solo trabaja en una dirección, la subclase o clase hija hereda las características de su clase padre o superclase, pero la clase padre no posee las características de la hija. Para el caso anterior ClaseA no tendría atributo2 ni metodo2(); Como sobrescribir métodos y atributos Como hemos visto anteriormente, una subclase declara atributos nuevos y operaciones sobre una superclase. Es posible y en muchos casos útil sobrescribir las mismas operaciones o atributos declarados en la superclase. Esto se hace para dar a un atributo un valor diferente en la subclase que el que tiene en la superclase o en el caso de las operaciones para cambiar la funcionalidad de estas. Veamos un ejemplo, por ejemplo si tenemos la clase A: class A { var $atributo = 'valor inicial' function operación() { echo 'Clase A:<br>'; echo 'El valor de $atributo es $this->atributo<br>'; } } Queremos crear una subclase B y alterar el valor de atributo y la funcionalidad de operación de la clase A, entonces escribimos: Class B extends A { var $atributo = 'valor cambiado'; function operación() { echo 'Clase B:<br>'; echo 'El valor de $atributo ahora es $this->atributo<br>'; } } Como podemos observar hemos definido una variable y una operación en B con el mismo nombre que tenían en A.
  • 8. Como se ha comentado anteriormente aunque declaremos B no afecta a la definición de A, y si creamos un objeto de la superclase A esté mantendrá sus valores originales. Solo sobrescribiremos los valores y funcionalidad de A cuando creemos un objeto de la clase B. A diferencia de otros lenguajes OO, PHP no nos permitirá sobrescribir una función o atributo y poder llamar a los valores de la clase padre. La herencia puede tener muchas capas de profundidad, por ejemplo podemos tener una clase C que es subclase de B y está última ser subclase de A, la subclase C heredará y sobrescribirá aquellos atributos y métodos de sus clases padres, en este caso A y B. ¿Soporta PHP la herencia múltiple? Algunos lenguajes OO soportan herencia múltiple, esto significa que una subclase puede heredar de varias clases padres. PHP no permite esto y una subclase solo puede heredar de una clase padre, sin embargo en PHP no hay ningún tipo de restricción en cuanto a el número de subclases que pueden heredar de una misma clase padre o superclase. Qué es el polimorfismo y como implementarlo Cualquier lenguaje de programación orientado a objetos debe soportar el polimorfismo, esto significa que clases diferentes tendrán un comportamiento distinto para la misma operación. Esto lo veremos más claro con el siguiente ejemplo. Supongamos que tenemos dos clases distintas coche y ciclomotor. Ambas tienen sus propios métodos de movimiento, éstos tienen diferentes comportamientos, pero su nombre es el mismo class coche { function avanza() { } function para() { } function girar_derecha() { } } class ciclomotor { function avanza() { } function para() { } function girar_derecha() { } } Como podemos observar, ambas clases tienen los mismos métodos, supongamos ahora que tenemos otra clase que controla el movimiento de todos los vehículos, es aquí donde entra
  • 9. en juego el polimorfismo, que dependiendo del objeto que tratemos actuará de una forma u otra el método al que llamamos. class movimiento { function mover_adelante($obj) { $obj->avanza(); } } Supongamos que queremos mover cualquier vehículo hacia adelante entonces haríamos: $obj_coche = new coche(); $obj_ciclomotor = new ciclomotor(); $obj_movimiento = new movimiento(); // con esta sentencia el coche avanzaria hacia adelante. $obj_movimiento->mover_adelante($obj_coche); // con esta sentencia el ciclomotor avanzaría hacia adelante. $obj_movimiento->mover_adelante($obj_ciclomotor);
  • 10. en juego el polimorfismo, que dependiendo del objeto que tratemos actuará de una forma u otra el método al que llamamos. class movimiento { function mover_adelante($obj) { $obj->avanza(); } } Supongamos que queremos mover cualquier vehículo hacia adelante entonces haríamos: $obj_coche = new coche(); $obj_ciclomotor = new ciclomotor(); $obj_movimiento = new movimiento(); // con esta sentencia el coche avanzaria hacia adelante. $obj_movimiento->mover_adelante($obj_coche); // con esta sentencia el ciclomotor avanzaría hacia adelante. $obj_movimiento->mover_adelante($obj_ciclomotor);