Programación Orientada A Objetos Con PHP
Programación Orientada A Objetos Con PHP
Programación Orientada A Objetos Con PHP
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
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.
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
#declaracion de merodos
4
$this->nombre=$suNombre;
$this->edad=$suEdad;
}
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.
5
}
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.
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 {
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.
El modelo:
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.
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.
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
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
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();
}
?>
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.
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";
// verificando la conexion
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// cerrando la conexión
mysqli_close($conn);
?>
usuarioModel.php
<?php
require_once('conectando.php');
class usuarioModel extends conectando{
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