Diferencia entre revisiones de «PHP Exercicios POO»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 87: Línea 87:
 
* Comproba que non lle deu erros, pero queda coa dúbida se terá almacenados os valores dunha forma correcta, polo que é necesario que imprima devanditos valores.
 
* Comproba que non lle deu erros, pero queda coa dúbida se terá almacenados os valores dunha forma correcta, polo que é necesario que imprima devanditos valores.
 
: Para 'imprimir' os valores, necesita un procedemento (método) que os saque por pantalla.
 
: Para 'imprimir' os valores, necesita un procedemento (método) que os saque por pantalla.
−
: Así que decide crear dentro da clase Vehículo, un método que imprima devandita información. Podería facer un único método que imprima o ano, matrícula e marca á vez, pero decide crear tres métodos, un para cada tipo de información a imprimir, de nome impAno, impMatricula, impMarca, por se necesita mostrar a información de
+
: Así que decide crear dentro da clase Vehículo, un método que imprima devandita información. Podería facer un único método que imprima o ano, matrícula e marca á vez, pero decide crear tres métodos, un para cada tipo de información a imprimir, de nome impAno, impMatricula, impMarca, por se necesita mostrar a información de forma individualizada.
−
forma individualizada.
 
  
−
* Unha vez implantados, decide probalos, a ver se mostran a información correcta, Para
+
* Unha vez implantados, decide probalos, a ver se mostran a información correcta, Para iso modifica a páxina Principal, facendo que cada obxecto Vehículo chame a cada un dos métodos.
−
iso modifica a páxina Principal, facendo que cada obxecto Vehículo chame a cada un dos
 
−
métodos.
 
  
 
<br />
 
<br />

Revisión del 18:06 21 nov 2016

Definición de clases. Creación de obxectos e acceso a variables e métodos

  • Un programador novato (PN) decide introducirse no mundo da POO e intenta implantar

unha solución informática para a xestión dos vehículos da Empresa de Transporte na que traballa. Decide utilizar como linguaxe de programación PHP.

  • O problema que se lle expón é o seguinte: necesita almacenar información sobre os

distintos vehículos de que dispón a Empresa. Entre esta información está o ano de compra do vehículo, a súa matrícula, a súa marca.

  • O PN decide implantar nunha clase, a información necesaria.
Na páxina que vai amosar os datos (chamarémoslle Principal, o PN vai crear os catro vehículos de que dispón a Empresa neste momento, e vailles a asignar uns valores:
Php POO Ex 1.jpg

Exercicio: implantar a solución




Solución:

  • Arquivo: Vehiculos.class.php
1 <?php
2 
3 class Vehiculos{
4     public $matricula;
5     public $marca;
6     public $ano;
7     
8 }
  • Arquivo: IncluirClases.inc.php
1 <?php
2     function cargadorClases($class) {
3         require $class . '.class.php';
4     }
5 
6     spl_autoload_register('cargadorClases');


  • Arquivo: Principal.php
 1 <?php
 2     include 'IncluirClases.inc.php';
 3 ?>
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 5     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 6 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">
 7     <head>
 8         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 9         <title>Exemplos de uso de clases</title>
10     </head>
11     <body>
12         <?php
13             $veh1 = new Vehiculos();
14             $veh2 = new Vehiculos();
15             $veh3 = new Vehiculos();
16             $veh4 = new Vehiculos();
17             
18             $veh1->marca = "Peugot";
19             $veh1->matricula = "C-1234-BZ";
20             $veh1->ano = 1999;
21             
22             $veh2->marca = "Fiat";
23             $veh2->matricula = "C-4325-AZ";
24             $veh2->ano = 1998;
25             
26             $veh3->marca = "Opel";
27             $veh3->matricula = "C-2342-AF";
28             $veh3->ano = 1996;
29             
30             $veh4->marca = "Ford";
31             $veh4->matricula = "C-4322-CF";
32             $veh4->ano = 2000;
33         ?>
34     </body>
35     
36 </html>


  • Comproba que non lle deu erros, pero queda coa dúbida se terá almacenados os valores dunha forma correcta, polo que é necesario que imprima devanditos valores.
Para 'imprimir' os valores, necesita un procedemento (método) que os saque por pantalla.
Así que decide crear dentro da clase Vehículo, un método que imprima devandita información. Podería facer un único método que imprima o ano, matrícula e marca á vez, pero decide crear tres métodos, un para cada tipo de información a imprimir, de nome impAno, impMatricula, impMarca, por se necesita mostrar a información de forma individualizada.
  • Unha vez implantados, decide probalos, a ver se mostran a información correcta, Para iso modifica a páxina Principal, facendo que cada obxecto Vehículo chame a cada un dos métodos.




Solución:

  • Arquivo: Vehiculos.class.php
 1 <?php
 2 
 3 class Vehiculos {
 4     public $matricula;
 5     public $marca;
 6     public $ano;
 7     
 8     public function impMatricula() {
 9         printf("<div>%s</div>",$this->matricula);
10     }
11     public function impMarca() {
12         printf("<div>%s</div>",$this->marca);
13     }
14     public function impAno() {
15         printf("<div>%s</div>",$this->ano);
16     }
17     
18 }


  • Arquivo: Principal.php
 1             ...........
 2 
 3             echo "<b>Datos veh1</b><br />";
 4             $veh1->impMatricula();
 5             $veh1->impMarca();
 6             $veh1->impAno();
 7             
 8             echo "<b>Datos veh2</b><br />";
 9             $veh2->impMatricula();
10             $veh2->impMarca();
11             $veh2->impAno();
12 
13             echo "<b>Datos veh3</b><br />";
14             $veh3->impMatricula();
15             $veh3->impMarca();
16             $veh3->impAno();
17             ...........

Nota: Soamente se amosa o código engadido á páxina Principal.

Herdanza

  • O PN atópase bastante satisfeito do conseguido ata agora, pero isto só era unha pequena parte do que ten que facer. Digamos que a súa empresa adícase ao transporte de

diñeiro, concretamente dous dos seus vehículos que son furgonetas, e que cada vehículo pode transportar unha cantidade de diñeiro. Ademais cada furgoneta leva consigo un número de vixiantes xurados. Devandita información é necesario almacenala.

Ante esta situación, o PN decide crear unha nova clase, Furgoneta, cos procedementos

da clase Vehículo e os novos atributos (cantidade de diñeiro e número de vixiantes xurados). Pero cando ía empezar a implantar devandita solución, aparece o Programador Experto, alguén que xa traballou en Xava moitos anos, e ao ver o que ía facer, explícalle que en Xava, ao ser unha Linguaxe de POO pódese realizar o que se chama Herdanza. É dicir, crear unha subclase que herde todo o que ten a superclase.

Con esta gran vantaxe, o PN decide crear un subclase Furgoneta da superclase Vehículo. Dentro da nova clase Furgoneta, implementa os novos atributos (cantidade de diñeiro e número de vixiantes

xurados), xa que son atributos propios da clase Furgoneta, que non ten a clase Vehículo. Por outra banda, como o PN quererá mostrar a información destes dous novos atributos, tamén crea, dentro da propia clase Furgoneta, dous métodos, para mostrar devanditos atributos de nome impDiñeiro, impXurados.

Para probar esta nova clase, vai ter que modificar a súa páxina Principal, xa que tiña implantados catro obxectos da clase Vehiculos, pero agora sabe que dúas deses vehículos son Furgonetas, polo que terá que cambiar o seu código, e se antes tiña catro

vehículos da forma:

1             $veh1 = new Vehiculos();
2             $veh2 = new Vehiculos();
3             $veh3 = new Vehiculos();
4             $veh4 = new Vehiculos();
Agora terá dous vehículos e dúas Furgonetas da forma:
1             $veh1 = new Vehiculos();
2             $veh2 = new Vehiculos();
3             $furg1 = new Furgonetas();
4             $furg2 = new Furgonetas();


A cada un dos seus vehículos (furgonetas e vehículos) asignaralles os valores aos seus

atributos e chamará aos métodos que imprimen devanditos valores.

O PN realiza todo o anterior, comprobando que todo é correcto.




Solución:


Arquivo: Furgonetas.class.php

 1 <?php
 2 
 3 class Furgonetas extends Vehiculos {
 4     public $diñeiro;
 5     public $numVixiantes;
 6     
 7     public function impDiñeiro() {
 8         printf("<div>%s</div>",$this->diñeiro);
 9     }
10     public function impNumVixiantes() {
11         printf("<div>%s</div>",$this->numVixiantes);
12     }
13     
14 }

Arquivo: Principal.php

 1     <body>
 2         <?php
 3             $veh1 = new Vehiculos();
 4             $veh2 = new Vehiculos();
 5             $furg1 = new Furgonetas();
 6             $furg2 = new Furgonetas();
 7 
 8             $veh1->marca = "Peugot";
 9             $veh1->matricula = "C-1234-BZ";
10             $veh1->ano = 1999;
11             
12             $veh2->marca = "Fiat";
13             $veh2->matricula = "C-4325-AZ";
14             $veh2->ano = 1998;
15             
16             $furg1->marca = "Opel";
17             $furg1->matricula = "C-2342-AF";
18             $furg1->ano = 1996;
19             
20             
21             $furg2->marca = "Ford";
22             $furg2->matricula = "C-4322-CF";
23             $furg2->ano = 2000;
24             
25             $furg1->diñeiro = 1000;
26             $furg1->numVixiantes = 1;
27             $furg2->diñeiro = 5000;
28             $furg2->numVixiantes = 3;
29 
30             echo "<b>Datos veh1</b><br />";
31             $veh1->impMatricula();
32             $veh1->impMarca();
33             $veh1->impAno();
34             
35             echo "<b>Datos veh2</b><br />";
36             $veh2->impMatricula();
37             $veh2->impMarca();
38             $veh2->impAno();
39 
40             echo "<b>Datos Furgoneta 1</b><br />";
41             $furg1->impMatricula();
42             $furg1->impMarca();
43             $furg1->impAno();
44             $furg1->impDiñeiro();
45             $furg1->impNumVixiantes();
46 
47             echo "<b>Datos Furgoneta 2</b><br />";
48             $furg2->impMatricula();
49             $furg2->impMarca();
50             $furg2->impAno();
51             $furg2->impDiñeiro();
52             $furg2->impNumVixiantes();
53 ?>
54     </body>


Outra

Outra



-- Ángel D. Fernández González -- (2016).