Diferencia entre revisiones de «PHP Exercicios POO»
| 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
Sumario
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:
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).