Usuario:ManuelRomero/ProgramacionWeb/Objetos/introduccionBase
De WikiEducator
< Usuario:ManuelRomero | ProgramacionWeb/Objetos
Revisión a fecha de 05:28 8 ene 2025; ManuelRomero (Discusión | contribuciones)
Contenido
Conceptos básicos de OOP
OOP Vs Programación estructurada
- En programación el paradigma imperativo está basado en funciones y datos.
- El paradigma orientado a objetos está basado en Objetos.
- Los objetos son el elemento básico y central de la programación orientada a objetos (OOP) o (POO).
- Podemos hablar de universo de discurso como el sistema que queremos automatizar por software
- Un Objeto es una entidad (concreta o abstracta) que presenta una actividad en un entorno concreto, en un determinado universo de discurso.
Objeto Cada elemento activo que identificamos dentro de un determinado universo de discurso.
|
Ejemplo
| |
|
Ejemplo
| |
|
| {{{1}}} |
- Puede parecer una forma más complicada de programar, pero es una manera de dividir la naturaleza del problema que estamos estudiando en unidades independientes que pueden interactuar entre ellas.
- Cada una de ellas va a tener una identidad propia asignando valores a sus atributos
- Cada una de ellas va a tener un comportamiento concreto que va a ser lo que sabe hacer para que los demás o el programa principal lo utilice
Elementos en la programación orientada a objetos
- De lo dicho anteriormente deducimos que tenemos dos elementos:
- Los atributos o características de la clase.
- Los métodos o comportamiento de la clase .
- Para crear objetos, previamente hay que definir su estructura.
- La definición de la estructura (atributos y métodos ) de componentes software se llama clase
|
- Elementos de la POO
|
- Elementos de la POO
|
OOP en PHP
- PHP no se diseñó originalmente como un lenguaje orientado a objetos, por lo que muchas de las características de este paradigma se han ido incorporando en las últimas versiones, especialmente a partir de la versión 5.3.
- PHP almacena el valor de un objeto como una referencia (dirección de memoria), no como una copia del valor.
- Esto implica que, si queremos pasar un objeto a través de la red, debemos serializarlo, para que viaje también el valor del mismo y no solo la dirección de memoria (que en destino carecería de sentido). Veremos este concepto más adelante.
- En PHP las clases tienen métodos y propiedades
- Propiedades: son los atributos o características de la clase.
- Métodos: representan el comportamiento de la clase.
- Definir una clase en PHP
class NombreClase { // propiedades // métodos }
- NombreClase es un identificador válido según la siguiente expresión regular:
^[a-zA-Z_][a-zA-Z0-9_]*$
- Se recomienda que el nombre de las clases comience con mayúscula.
- Los nombres de las clases no son sensibles a mayúsculas/minúsculas, aunque es buena práctica tratarlos como si lo fueran.
- Es muy recomendable guardar las clases en ficheros cuyo nombre coincida con el de la clase; esto permite la autocarga y forma parte de las buenas prácticas de programación.
Ejemplo
| |
|
Vamos a crear una clase llamada Fecha.
|
Declaramos la clase
- Utilizaremos siempre un fichero con el mismo nombre que la clase.
class Fecha { }
Los atributos
- Al declarar los atributos, aparece un concepto importante: la visibilidad o alcance del atributo, es decir, desde dónde puede verse o modificarse su valor.
- Encapsulación
- acceso a los componentes
- Al definir tanto las propiedades como los métodos, especificamos su nivel de acceso.
- Es una buena práctica no permitir acceso directo a los atributos, sino hacerlo a través de métodos específicos.
|
- Visibilidad
- Implementa el principio de encapsulación.
- Permite especificar desde qué ámbito se tiene acceso a un determinado elemento.
- Básicamente tenemos tres niveles:
- Desde la propia clase.
- Desde otras clases no relacionadas o desde el programa principal.
- Desde clases que extienden a otra (herencia).
- Por tanto, existen tres tipos de visibilidad:
- public
- private
- protected
Tip:
- public: tipo de visibilidad asignada por defecto a los métodos (si no se especifica).
- En el caso de los atributos hay que declararla de forma explícita.
- El uso de la palabra reservada var está depreciado; antes se usaba para declarar atributos públicos.
- public
- Los elementos públicos pueden ser accesibles desde cualquier ámbito en el que exista una referencia al objeto.
- private
- Los elementos con este modificador solo son accesibles desde el interior de la propia clase (ni siquiera desde clases heredadas).
- En POO es habitual hacer todos los atributos privados y acceder a ellos mediante los métodos getter y setter.
Tip:
A un elemento private de una clase tampoco se puede acceder desde clases derivadas, pero en PHP sí se puede acceder a los atributos privados de otro objeto de la misma clase:
class A { private $foo; public function compara(A $b) { // Se puede acceder directamente al atributo privado $foo de otro objeto de la misma clase if ($this->foo == $b->foo) { return true; } return false; } }
- protected
- Este tipo de visibilidad permite el acceso solo desde la propia clase y desde clases derivadas (herencia).
- Siguiendo con nuestro ejemplo de Fecha, declaramos los atributos
class Fecha { // Declaración de atributos private int $dia; private int $mes; private int $year; }
Los métodos
- Es la forma de especificar el comportamiento de la clase: lo que el objeto sabe hacer dentro del programa.
- Los métodos se definen usando la palabra reservada function.
- En PHP orientado a objetos existen métodos especiales llamados #métodos mágicos, que se ejecutan automáticamente cuando ocurre un evento concreto (por ejemplo, al crear o destruir un objeto).
- Métodos constructor y destructor
- En PHP, a diferencia de Java, no podemos usar un método con el mismo nombre que la clase (desde PHP 7.4 genera error).
- El constructor se define con el método mágico __construct() y se ejecuta automáticamente al instanciar un objeto.
- De forma similar, el método __destruct() se ejecuta al destruir un objeto.
- Ambos son opcionales y su invocación es transparente para el programador.
- En __construct() podemos pasar parámetros para inicializar los atributos del objeto.
- Ejemplo
- construyendo nuestra clase
class Fecha { private int $dia; private int $mes; private int $year; public function __construct(int $d, int $m, int $y) { $this->dia = $d; $this->mes = $m; $this->year = $y; } }
- En este código aparecen dos conceptos importantes
- La seudovariable $this
- El operador de indirección ->
$this y el operador de indirección ->
- Para acceder a los atributos o métodos de un objeto dentro de la clase usamos la seudovariable $this.
- $this hace referencia al objeto actual (la instancia sobre la que se está ejecutando el método).
- Si dentro de un método se omite $this->, PHP interpretará las variables como locales y no como atributos de la clase.
<?php class Persona { public $nombre; public $apellido; public function __construct(string $n, string $a) { // ERROR: asignación a variables locales, no a atributos $nombre = $n; $apellido = $a; } } $p = new Persona("María", "Ruiz"); echo "<h1>Nombre: $p->nombre</h1>"; echo "<h1>Apellido: $p->apellido</h1>";
public function __construct(string $n, string $a) { $this->nombre = $n; $this->apellido = $a; }
|
|
- El operador de indirección ->
- En PHP los objetos se manejan internamente como referencias en memoria.
- Para acceder a sus elementos se usa el operador ->, que “indirecciona” hacia el atributo o método deseado.
- Es la forma que tiene PHP de especificar a qué elemento concreto de un objeto se quiere acceder.
Declarando objetos: operador new
- Permite crear instancias (objetos) en memoria.
- Una clase describe la estructura común de un conjunto de objetos, su composición o plantilla.
- En un programa, crearemos objetos (instancias) a partir de las clases mediante el operador new.
- Una vez instanciado, tenemos una referencia al objeto y podemos usarlo.
- Recordemos que cada objeto ocupa su propio espacio en memoria (con sus propios atributos y métodos).
Ejemplo en el programa principal:
require "Fecha.php"; $f1 = new Fecha(10, 2, 1998);
Acceso al contenido del objeto
- Para acceder a un elemento de un objeto usamos los operadores -> o :: (este último para elementos estáticos).
- Operador de indirección ->
- Este operador permite acceder al contenido de un objeto a través de su referencia.
- Cuando se usa dentro de la clase, suele acompañarse de $this;
cuando se usa fuera, de una variable objeto.
class Clase1 { public $propiedad1; public function __construct($valor) { // No se usa $ delante del nombre de la propiedad $this->propiedad1 = $valor; } } $obj1 = new Clase1("verde"); $obj1->propiedad1 = "azul";
