Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Programación Orientada A Objetos Con PHP

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 19

INTRODUCCIÓN A LA PROGRAMACIÓN

ORIENTADA A OBJETOS
MVC-POO
CONTENIDO
1. INTRODUCCIÓN....................................................................................................................1
2. PRINCIPIOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS.............................1
3. VENTAJAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS...............................3
4. CLASES Y OBJETOS EN PHP..............................................................................................4
5. MODIFICADORES DE ACCESO.........................................................................................6
5. CONSTRUCTORES................................................................................................................7
6. PATRÓN DE DISEÑO DE SOFTWARE MODELO VISTA CONTROLADOR (MVC). 9
7. RELACIÓN ENTRE MODELO, VISTA Y CONTROLADOR.........................................11

i
8. INTRODUCCIÓN

La programación Orientada a objetos se define como un paradigma de la programación, una


manera de programar específica, donde se organiza el código en unidades denominadas
clases, de las cuales se crean objetos que se relacionan entre sí para conseguir los objetivos
de las aplicaciones.
Podemos entender la programación Orientada a objetos (POO) como una forma especial de
programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de
programación, que permite diseñar mejor las aplicaciones, llegando a mayores cotas de
complejidad, sin que el código se vuelva inmanejable.
Al programar orientado a objetos tenemos que aprender a pensar cómo resolver los
problemas de una manera distinta a como se realizaba anteriormente, en la programación
estructurada. Ahora tendremos que escribir nuestros programas en términos de clases,
objetos, propiedades, métodos, etc.
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas
que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los
programadores puedan ser reutilizados se creó la posibilidad de utilizar módulos. El primer
módulo existente fue la función, que somos capaces de escribir una vez e invocar cualquier
número de veces.
Sin embargo, la función se centra mucho en aportar una funcionalidad dada, pero no tiene
tanto interés con los datos. Es cierto que la función puede recibir datos como parámetros y
puede devolverlos, pero los trata de una estructura muy volatil, centrada en las operaciones.
Simplemente hace su trabajo, procesando los parámetros recibidos y devuelve una
respuesta.
Con la Programación Orientada a Objetos se buscaba resolver estas situaciones, creando
unas mejores condiciones para poder desarrollar aplicaciones cada vez más complejas, sin
que el código se volviera un caos.

8. PRINCIPIOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS

1
Encapsulación:
La implementación y el estado de cada objeto
se mantienen de forma privada dentro de un
límite definido o clase. Otros objetos no
tienen acceso a esta clase o la autoridad para
realizar cambios, pero pueden llamar a una
lista de funciones o métodos públicos. Esta
característica de ocultación de datos
proporciona una mayor seguridad al
programa y evita la corrupción de datos no
intencionada.

Abstracción:
La abstracción es un proceso de
interpretación y diseño que implica
reconocer y enfocarse en las características
importantes de una situación u objeto, y
filtrar o ignorar todas las particularidades no
esenciales.
 Dejar a un lado los detalles de un
objeto y definir las características
específicas de éste, aquellas que lo
distingan de los demás tipos de objetos.
 Hay que centrarse en lo que es y lo que
hace un objeto, antes de decidir cómo
debería ser implementado.
 Se hace énfasis en el qué hace más que
en el cómo lo hace
.
Herencia:
Es una propiedad que permite crear clases a
partir de otras ya existentes, obteniendo
características (métodos y atributos) similares a
los ya existentes. En otras palabras, la nueva
clase (subclase o clase derivada) puede utilizar
la misma implementación de su superclase
(clase base) o especificar una nueva
implementación.

2
 Es la relación entre una clase general y otra clase más específica.
 Es un mecanismo que nos permite crear clases derivadas a partir de clases base.
 Nos permite compartir automáticamente métodos y datos entre clases, subclases y
objetos. Por ejemplo: Si declaramos una clase párrafo derivada de una clase texto
todos los métodos y variables asociadas con la clase texto son automáticamente
heredados por la subclase párrafo.

Polimorfismo:
Los objetos pueden adoptar más de una forma
según el contexto. El programa determinará
qué significado o uso es necesario para cada
ejecución de ese objeto, reduciendo la
necesidad de duplicar código.

8. VENTAJAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS

Reutilización del código heredado. Cuando se diseñan correctamente las clases, se pueden
usar en distintas partes del programa y en diferentes proyectos. La técnica de herencia
ahorra tiempo porque permite crear una clase genérica y luego definir las subclases que
heredarán los rasgos de la misma, de manera que no es necesario escribir esas funciones de
nuevo. Además, al aplicar un cambio en la clase, todas las subclases lo adoptarán
automáticamente.
Mayor modificabilidad. Otra de las ventajas de la programación orientada a objetos es que
permite añadir, modificar o eliminar nuevos objetos o funciones fácilmente para actualizar
los programas, lo cual implica un ahorro de tiempo y esfuerzo para los programadores.
Facilidad para detectar errores en el código. En los lenguajes de programación orientada
a objetos no es necesario revisar línea por línea del código para detectar un error. Gracias a
la encapsulación los objetos son autónomos, de manera que es más fácil abstraer un
problema y saber dónde buscar el error cuando algo no funciona bien.
Modularidad. Una de las características de la programación orientada a objetos más
interesantes es el modularidad ya que así un equipo puede trabajar en múltiples objetos a la
vez mientras se minimizan las posibilidades de que un programador duplique la
funcionalidad de otro. El trabajo modular también permite dividir los problemas en partes
más pequeñas que se pueden probar de manera independiente.
Flexibilidad gracias al polimorfismo. El polimorfismo de la programación orientada a
objetos permite que una sola función pueda cambiar de forma para adaptarse a cualquier

3
clase donde se encuentre. De esta forma se ahorra tiempo de programación y se gana en
versatilidad

8. CLASES Y OBJETOS EN PHP

¿Qué es una clase de PHP?


Una clase es una plantilla que representa a una entidad del mundo real, y define
propiedades y métodos para la misma.
Sintaxis para definir una clase en php. En un archivo php debemos de utilizar la palabra
reservada class, seguido del nombre de la clase como se ve en el siguiente ejmplo.
<?php
class nombre_clase {
//declaracion de atributos

#declaracion de merodos

Ejemplo de aplicación de una clase


Crear una clase persona con los siguientes atributos nombre, edad.
Con los métodos caminar, hablar
De acuerdo a la edad el método caminar deberá mostrar lo siguiente:
Si edad < 4 gatea
Si edad >=4 y edad<=70 camina
Si edad >70 camina con ayuda de bastón
De acuerdo a la edad el método hablar deberá mostrar lo siguiente:
Si edad < 4 intenta hablar
Si edad >=4 y edad<=70 habla bastante
Si edad >70 habla poco
En un archivo persona.php, escribir el siguiente código
<?php
class persona {
#creando un constructor para la clase persona
public function __construct($suNombre, $suEdad){

4
$this->nombre=$suNombre;
$this->edad=$suEdad;
}

#creando los métodos de caminar y hablas con las condiciones


#dadas
public function caminar(){
if($this->edad<4){
echo $this->nombre.' gatea';
}
elseif($this->edad>=4 && $this->edad<=70){
echo $this->nombre.' camina';
}
else{
echo $this->nombre.' camina con ayuda de bastón';
}
}
public function hablar(){
if($this->edad<4){
echo $this->nombre.' intenta hablar';
}
elseif($this->edad>=4 && $this->edad<=70){
echo $this->nombre.' habla bastante';
}
else{
echo $this->nombre.' habla poco';
}
}
}

¿Qué es un objeto en PHP?

En la POO, los objetos se crean instanciando una clase. Una clase es una plantilla o molde
que define las propiedades y comportamientos que tendrán los objetos creados a partir de
ella. Cada objeto creado a partir de una clase se denomina instancia de esa clase.

Sintaxis para definir instanciar una clase en php.


 $nombre_objeto=new nombre_clase();
<?php
class persona {
#creando un constructor para la clase persona
public function __construct($suNombre, $suEdad){
$this->nombre=$suNombre;
$this->edad=$suEdad;

5
}

#creando los metodos de caminar y hablas con las condiciones


#dadas
public function caminar(){
if($this->edad<4){
echo $this->nombre.' gatea';
}
elseif($this->edad>=4 && $this->edad<=70){
echo $this->nombre.' camina';
}
else{
echo $this->nombre.' camina con ayuda de bastón';
}
}
public function hablar(){
if($this->edad<4){
echo $this->nombre.' intenta hablar';
}
elseif($this->edad>=4 && $this->edad<=70){
echo $this->nombre.' habla bastante';
}
else{
echo $this->nombre.' habla poco';
}
}
}

#creando un objeto de la clase persona


$perso=new persona('Ramon',78);
#accediendo a los atributos de la clase persona mediante el objeto
$perso
echo $perso->nombre.' '.$perso->edad;
echo '<br>';
#accediendo a los metodos de la clase persona mediante el objeto
$perso
$perso->caminar();
echo '<br>';
$perso->hablar();

6
5. MODIFICADORES DE ACCESO

Cuando se define una propiedad o un método en una clase, se puede declarar para que tenga
uno de estos tres niveles de acceso public, private o protected (público, privado o
protegido).
Acceso público “public”
Este puede ser accedido desde cualquier lugar del exterior de la clase. El valor de una
propiedad pública puede ser modificado desde cualquier lugar en tu código.
Acceso privado “private”
Cuando se declara una propiedad o un método como private (privado), solamente puede
accederse a él desde el interior de la clase. Esto significa que se necesita definir métodos
para asignar y mostrar el valor de esa propiedad.
Acceso protegido “protected”
Cuando se declara una propiedad o un método como protected (protegido), es posible
acceder a él desde la misma clase que lo haya definido y desde las clases que hereden la
clase en cuestión.

Visibilidad Public Private Protected


Desde la misma clase SI SI SI
Desde una sub clase SI SI SI
Desde otra clase SI NO NO

8. CONSTRUCTORES

El constructor es un método especial dentro de una clase, se suele utilizar para darle un
valor a los atributos del objeto al crearlo.
Es el primer método que se ejecuta al crear el objeto y se llama automáticamente al crearlo.
Este método puede recibir parámetros como cualquier otro método y para introducirlos se
lo hace desde el objeto. El constructor NO DEVUELVE ningún dato.
Debemos definir un método llamado __construct (es decir utilizamos dos caracteres de
subrayado y la palabra construct). El constructor debe de contar con un modificador público
(public function).
Sintaxis
public function __construct($parametro1, $parametro2,....){
#inicializacion de atributos o lamadas a métodos
}

7
Aplicando constructores a la clase persona
<?php
class persona {

#creando los atributos nombre, edad y asignandoles valores


public $nombre='Juan';
public $edad=10;

#creando un constructor para la clase persona


public function __construct($suNombre, $suEdad){
$this->nombre=$suNombre;
$this->edad=$suEdad;
}

#creando los metodos de caminar y hablas con las condiciones


#dadas
public function caminar(){
if($this->edad<4){
echo $this->nombre.' gatea';
}
elseif($this->edad>=4 && $this->edad<=70){
echo $this->nombre.' camina';
}
else{
echo $this->nombre.' camina con ayuda de bastón';
}
}
public function hablar(){
if($this->edad<4){
echo $this->nombre.' intenta hablar';
}
elseif($this->edad>=4 && $this->edad<=70){
echo $this->nombre.' habla bastante';
}
else{
echo $this->nombre.' habla poco';
}
}
}

#creando un objeto de la clase persona

8
$perso=new persona('Ramon',78);
#accediendo a los atributos de la clase persona mediante el objeto $perso
echo $perso->nombre.' '.$perso->edad;
echo '<br>';
#accediendo a los métodos de la clase persona mediante el objeto $perso
$perso->caminar();
echo '<br>';
$perso->hablar();
Ejercicio 1
Modifique la clase persona
o Adicione el atributo sexo
o El constructor que inicialice los atributos nombre, edad, sexo
o Cree un nuevo método que muestre los valores de los atributos
o Cree un objeto perso1 a partir de la clase persona y ejecute el siguiente
código
#creando un objeto de la clase persona
$perso1=new persona('Maria',78,'Mujer');
#accediendo a los atributos de la clase persona mediante el objeto
$perso
$perso1->mostrardatos();
echo '<br>';
#accediendo a los métodos de la clase persona mediante el objeto
$perso
$perso1->caminar();
echo '<br>';
$perso1->hablar();
o La salida por pantalla deberá de ser de la siguiente manera:

9
8. PATRÓN DE DISEÑO DE SOFTWARE MODELO VISTA CONTROLADOR
(MVC)

MVC era inicialmente un patrón arquitectural, un modelo o guía que expresa cómo
organizar y estructurar los componentes de un sistema software, sus responsabilidades y las
relaciones existentes entre cada uno de ellos.

Su nombre, MVC, parte de las iniciales de Modelo Vista Controlador (Model-View-


Controller, en inglés), que son las capas o grupos de componentes en los que
organizaremos nuestras aplicaciones bajo este paradigma. Aunque el auge de este término
durante los últimos tiempos pueda indicar lo contrario, MVC no es un concepto nuevo, ya
que el patrón fue descrito en el año 1979 por Trygve Reenskaug, hoy en día profesor
emérito de informática de la Universidad de Oslo, mientras trabajaba con el equipo de
Smalltalk en los laboratorios Xerox PARC.

La arquitectura MVC propone, independientemente de las tecnologías o entornos en los que


se base el sistema a desarrollar, la separación de los componentes de una aplicación en tres
grupos (o capas) principales: el modelo, la vista, y el controlador, y describe cómo se
relacionarán entre ellos para mantener una estructura organizada, limpia y con un
acoplamiento mínimo entre las distintas capas.

El modelo:

Representa los datos y la lógica de negocio de la aplicación. Es responsable de manejar la


interacción con la base de datos, realizar cálculos y aplicar reglas de negocio. El modelo es
independiente de la interfaz de usuario, lo que significa que puede ser reutilizado en
diferentes contextos sin afectar la forma en que se presenta la información al usuario.

10
La vista

Es responsable de la presentación de los datos al usuario. Puede ser una interfaz gráfica de
usuario (GUI), una página web o cualquier otro medio a través del cual el usuario interactúa
con la aplicación. La vista obtiene los datos necesarios del modelo y la muestra de una
manera comprensible para el usuario.

El controlador

Actúa como intermediario entre el modelo y la vista. Recibe las acciones del usuario a
través de la vista y las interpreta para realizar las operaciones correspondientes en el
modelo. También actualiza la vista con los cambios realizados en el modelo. El controlador
garantiza que la lógica de negocio y la interacción con el usuario estén separadas, lo que
facilita la modificabilidad y el mantenimiento del código.

La ventaja principal del patrón MVC es la separación de responsabilidades, lo que permite


un desarrollo más estructurado y modular. Esto facilita la reutilización de código, mejora la
mantenibilidad y extensibilidad del sistema, y permite un desarrollo más rápido y eficiente.

8. RELACIÓN ENTRE MODELO, VISTA Y CONTROLADOR

Como se muestra en el diagrama, las acciones e información procedentes del usuario serán
recogidas exclusivamente por los controladores, mediante las rutas. Ningún componente de
otra capa debe acceder a los datos generados desde el cliente, de la misma forma que sólo
los componentes de la vista estarán autorizados a generar interfaces de usuario con las que
enviar información de retorno.

Destaca también el papel central del controlador. Tiene acceso bidireccional al Modelo, es
decir, será capaz tanto de actualizar su estado, invocando por ejemplo métodos o acciones
incluidos en su lógica de negocio, como de consultar la información que sea necesaria para
completar sus tareas. Sin embargo, en ningún caso el Modelo será consciente o mostrará

11
acoplamiento alguno respecto a las clases Controlador que lo están utilizando, ni conocerá
las distintas representaciones (vistas) que pueden realizarse de él cara al usuario.

Por otra parte, el controlador es el encargado de seleccionar la vista más apropiada en


función de la acción llevada a cabo por el usuario, suministrándole toda la información que
necesite para componer la interfaz. Para pasar esta información, el controlador puede usar
clases del modelo o, lo que es más habitual, clases específicamente diseñadas para ello,
denominadas View-Models, que contendrán toda la información que la vista necesite para
maquetarse y mantendrá a ésta aislada de los cambios en el modelo.

Ventajas de usar MVC

 Separación de preocupaciones: La división de responsabilidades en capas


independientes facilita la comprensión, el desarrollo y la gestión del código. Cada
componente se puede modificar sin afectar a los demás, lo que aumenta la
flexibilidad y la mantenibilidad.
 Reusabilidad: Los componentes de MVC son altamente reutilizables. Las vistas
pueden adaptarse para mostrar datos de diferentes modelos, y los modelos pueden
ser utilizados por diversos controladores. Esto reduce la duplicación de código y
optimiza el tiempo de desarrollo.
 Testabilidad: La independencia de los componentes facilita la escritura de pruebas
unitarias y la detección de errores. Cada capa puede ser probada de forma aislada, lo
que reduce el tiempo de depuración y aumenta la confiabilidad de la aplicación.

9. Ejemplo de MVC creación de una API veterinaria

Para aplicar el MVC y la creación de una API en php se realizará con el siguiente modelo
de base de datos

12
Código SQL para crear la base de datos BDDveterinaria

CREATE DATABASE BDDveterinaria;


USE BDDveterinaria;
CREATE TABLE usuario(
id INT NOT NULL AUTO_INCREMENT,
nombres VARCHAR(50) NOT NULL,
apellidos VARCHAR(50) NOT NULL,
ci VARCHAR(10) NOT NULL UNIQUE,
nombre_usuario VARCHAR(30) NOT NULL UNIQUE,
clave varchar(100) NOT NULL,
estado varchar(10)NOT NULL DEFAULT 'activo',
creado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
modificado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE
CURRENT_TIMESTAMP(),
PRIMARY KEY (id)
);
CREATE TABLE rol(
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
usuario_id INT NOT NULL UNIQUE,
creado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
modificado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE
CURRENT_TIMESTAMP(),

13
PRIMARY KEY(id),
CONSTRAINT fk_rol_usuario FOREIGN KEY(usuario_id) REFERENCES usuario(id)
ON DELETE cascade ON UPDATE cascade
);
CREATE TABLE permiso(
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
creado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
modificado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE
CURRENT_TIMESTAMP(),
PRIMARY KEY(id)
);
CREATE TABLE rol_permiso(
id INT NOT NULL AUTO_INCREMENT,
rol_id INT NOT NULL,
permiso_id INT NOT NULL,
PRIMARY KEY(id),
CONSTRAINT rol_permiso_rol FOREIGN KEY(rol_id) REFERENCES rol(id) ON
DELETE cascade ON UPDATE cascade,
CONSTRAINT rol_permiso_permiso FOREIGN KEY(permiso_id) REFERENCES
permiso(id) ON DELETE cascade ON UPDATE cascade
);
CREATE TABLE propietario(
id INT NOT NULL AUTO_INCREMENT,
nombres VARCHAR(50) NOT NULL,
apellidos VARCHAR(50) NOT NULL,
ci VARCHAR(10) NOT NULL UNIQUE,
direccion VARCHAR(150) NULL,
contacto VARCHAR(10) NULL,
usuario_id INT NOT NULL,
creado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
modificado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE
CURRENT_TIMESTAMP(),
PRIMARY KEY(id),
CONSTRAINT fk_propietario_usuario FOREIGN KEY(usuario_id) REFERENCES
usuario(id)
);
CREATE TABLE mascota(
id INT NOT NULL AUTO_INCREMENT,
especie VARCHAR(50)NOT NULL,
nombre VARCHAR(50) NOT NULL,
color VARCHAR(50) NOT NULL,
raza VARCHAR(50) NOT NULL,
propietario_id INT NOT NULL,
usuario_id INT NOT NULL,

14
creado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
modificado TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE
CURRENT_TIMESTAMP(),
PRIMARY KEY(id),
CONSTRAINT fk_mascota_propietario FOREIGN KEY(propietario_id) REFERENCES
propietario(id) ON DELETE cascade ON UPDATE cascade
);

Estructura de la API

10. Manejador de rutas

En index.php

<?php
if(isset($_GET["c"])==true && isset($_GET["m"])==true){
$controlador=$_GET["c"];
$metodo=$_GET["m"];
require_once("controllers/".$controlador.".php");
$objeto=new $controlador();
$objeto->$metodo();
}
else{
require_once("controllers/inicioController.php");
$inicio=new inicioController();
$inicio->vista_principal();
}
?>

 Conexión a la base de datos

Para conectarse a una base de datos MySQL usando PHP, puede usar la extensión mysqli,
que proporciona funciones para interactuar con bases de datos MySQL.

Una conexión a MySQL desde un script PHP implica varios pasos:

15
Credenciales: necesitará la siguiente información para conectarse:
 Nombre de host del servidor: la dirección del servidor MySQL (a menudo
localhost si está en la misma máquina que su script PHP).
 Nombre de usuario: Un nombre de usuario válido con permisos para acceder a la
base de datos deseada.
 Contraseña: La contraseña asociada al nombre de usuario.
 Nombre de la base de datos: la base de datos específica a la que desea conectarse.

Ejemplo de conexión
Conectando.php
<?php
$nombre_servidor = "localhost";
$nombre_usuario = "nombre del usuario";
$contraseña= "contraseña del usuario";
$nombre_base_datos = "nombre de la base de datos";

// creando una conexion


$conn = mysqli_connect($nombre_servidor, $nombre_usuario, $contraseña,
$nombre_base_datos);

// verificando la conexion
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

echo "Conexión exitosa";

// cerrando la conexión
mysqli_close($conn);
?>
usuarioModel.php
<?php
require_once('conectando.php');
class usuarioModel extends conectando{

public function mostrar_todos(){


$consulta="SELECT * FROM usuario";
$resultado=$this->conectar()->query($consulta);
//return $resultado;
if($resultado){
//creando una variable $datos de tipo array
$datos=array();
/*La función fetch_assoc en PHP se utiliza para recuperar una fila de
resultados de una consulta a una base de datos como un array

16
asociativo. */
while($fila=$resultado->fetch_assoc()){
$datos[]=$fila;
}
}
return $datos;
}

}
usuarioController.php
<?php
class usuarioController{
public function show(){
require_once('./Models/usuarioModel.php');
$datos=new usuarioModel();
//datos se puede enviar ahora a una vista frontend
/*La función json_encode en PHP se utiliza para convertir un valor
de PHP a un string en formato JSON (JavaScript Object Notation).*/
echo json_encode($datos->mostrar_todos());
}
}

17

También podría gustarte