Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Objetos/introduccionBase»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con « <div class=parrafo> {{PHP/ConceptosBasicosBase}} {{PHP/SintasixPHPOOPBase}} {{PHP/SobrecargaBase}} {{PHP/EstaticoBase}} {{PHP/HerenciaBase}} </div>»)
 
Línea 1: Línea 1:
 +
{{Usuario:ManuelRomero/ProgramacionWeb/ObjetosBase/nav}}
  
 
<div class=parrafo>
 
<div class=parrafo>
 
{{PHP/ConceptosBasicosBase}}
 
{{PHP/ConceptosBasicosBase}}
 
 
  
  

Revisión de 05:35 8 ene 2025



|}

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.




Icon define.gif
Definición
Objeto Cada elemento activo que identificamos dentro de un determinado universo de discurso.
Serán nuestros componentes software para ensamblar nuestros programas




Icon casestudy.gif
Ejemplo
En un banco hay cuentas bancarias (objeto)
Las cuentas bancarias se identifican con un número y un titular (nombre, apellido y dni) atributos
Las cuentas se pueden dar de alta, de baja, hacer extracciones e ingresos y transferencias... métodos




Icon casestudy.gif
Ejemplo
En la gestión de una empresa, a nivel de información tenemos
  • Empleados
  • Nóminas
  • Base de datos
  • Proveedores
  • Facturas
  • Pedidos

UNIVERSO DISCUROS OBJETOS.png




Icon casestudy.gif

Fecha

Una fecha es un componente que tiene
  • Unos atributos que lo definen (dia,mes,año)
  • Podemos Validar una fecha, mostrar una fecha, sumar a una fecha un número de días, ... métodos
UNIVERSO DISCUROS OBJETOS.png
{{{1}}}



Icon casestudy.gif
Compartiva con la aplicación de master mind
Comparativa oo estructurado.png





  • 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:
  1. Los atributos o características de la clase.
  2. 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


Icon define.gif
Clase
La descripción y especificación de componentes software para su posterior uso en los programas
  • Una clase es la estructura de un tipo concreto de objetos.
  • Los objetos son elementos concretos en mi sistema. Instancias de la clase en memoria para ser usadas por un programa



Elementos de la POO


Icon define.gif
Atributo
  • Son las características o datos de un objeto.
  • Sus valores nos da el estado de un objeto en un momento dado.
  • Normalmente al instanciar un objeto en memoria lo primero que hacemos es dar valores a sus atributos
  • Es recomendado que los atributos estén encapsulados solo al objeto (privados)




Elementos de la POO


Icon define.gif
Métodos
  • Especifican el comportamiento de los objetos.
  • Permiten modificar y conocer el estado de un objetos (métodos getter and setter).
  • Permiten que un objeto haga cosas en el sistema (comunicación entre objetos) .
  • Los métodos son las acciones que el objeto sabe hacer, servicios que ofrece
  • También son las acciones internas para facilitar las acciones al objeto


Clase.png



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
  1. Propiedades: son los atributos o características de la clase.
  2. 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.



Icon casestudy.gif
Ejemplo

Vamos a crear una clase llamada Fecha.

  • Atributos de la clase: dia, mes, year.
  • Método verFecha(): obtiene la fecha como una cadena de caracteres.
  • Método validarFecha(): verifica si una fecha es correcta o no.



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.



Icon key points.gif

Puntos clave

  • La encapsulación es uno de los pilares de la POO.
Permite o restringe la visibilidad de los componentes de una clase.



Visibilidad
  • Implementa el principio de encapsulación.
  • Permite especificar desde qué ámbito se tiene acceso a un determinado elemento.
  • Básicamente tenemos tres niveles:
  1. Desde la propia clase.
  2. Desde otras clases no relacionadas o desde el programa principal.
  3. Desde clases que extienden a otra (herencia).
  • Por tanto, existen tres tipos de visibilidad:
  1. public
  2. private
  3. protected
Icon present.gif
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.
Icon present.gif
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
  1. La seudovariable $this
  2. 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.



Icon activity.jpg
Observa el siguiente código
<?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>";

  • Forma correcta:*
public function __construct(string $n, string $a) {
    $this->nombre = $n;
    $this->apellido = $a;
}





Icon key points.gif

Puntos clave

  • $this se lee como: “cuando exista una instancia de esta clase, accede al atributo o método de ese objeto”.



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).

Objetos4.png

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";

Plantilla:PHP/SobrecargaBase

Plantilla:PHP/EstaticoBase

Plantilla:PHP/HerenciaBase