Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

Implementación de las clases Persona y Profesor en PHP - Prof. Tan Nozawa, Ejercicios de Programación Informática

En este documento se presenta la implementación de las clases abstracta Persona y su subclase Profesor en PHP. Las clases definen los atributos y métodos básicos de un objeto persona y profesor respectivamente. Además, se muestra cómo se utiliza cada clase en el contexto de un sistema de gestión de profesores.

Tipo: Ejercicios

Antes del 2010

Subido el 10/04/2022

jtnozawa
jtnozawa 🇪🇸

5 documentos

1 / 12

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Laboratorio PHP 7 Jaime M. Tan Nozawa
Ejercicio1: Abstracción de Objetos en PHP utilizando Iteradores
Archivos del proyecto:
alumnoCtrl.php (captura de eventos, las ejecuta los comandos y muestra las vistas)
profesorCtrl.php (captura de eventos, las ejecuta los comandos y muestra las vistas)
cursoCtrl.php (captura de eventos, las ejecuta los comandos y muestra las vistas)
vistas/alumnoFormView.php (Formulario de inserción de alumno)
vistas/alumnoListView.php (Formulario para listar alumno)
vistas/cursoFormView.php (Formulario de inserción de Curso)
vistas/profesorFormView.php (Formulario de inserción de Profesores)
vistas/profesorListView.php (Formulario para listar Profesores)
1. Primero se debe analizar los archivos PHP utilizados en sesiones anteriores.
2. Crear el siguiente diagrama de clases en ArgoUML:
jtnozawa@yahoo.com
pf3
pf4
pf5
pf8
pf9
pfa

Vista previa parcial del texto

¡Descarga Implementación de las clases Persona y Profesor en PHP - Prof. Tan Nozawa y más Ejercicios en PDF de Programación Informática solo en Docsity!

Ejercicio1: Abstracción de Objetos en PHP utilizando Iteradores

Archivos del proyecto: alumnoCtrl.php (captura de eventos, las ejecuta los comandos y muestra las vistas) profesorCtrl.php (captura de eventos, las ejecuta los comandos y muestra las vistas) cursoCtrl.php (captura de eventos, las ejecuta los comandos y muestra las vistas) vistas/alumnoFormView.php (Formulario de inserción de alumno) vistas/alumnoListView.php (Formulario para listar alumno) vistas/cursoFormView.php (Formulario de inserción de Curso) vistas/profesorFormView.php (Formulario de inserción de Profesores) vistas/profesorListView.php (Formulario para listar Profesores)

**1. Primero se debe analizar los archivos PHP utilizados en sesiones anteriores.

  1. Crear el siguiente diagrama de clases en ArgoUML:**

3. Creamos la función de autocarga de objetos autoload.php

**4. Implementamos la clase abstracta Persona:** abstract class logic_Persona { protected $nombre = ''; protected $apellido = ''; public function __construct($nombre, $apellidos){ **$this->nombre = $nombre;** **$this->apellido = $apellidos;** } public function getNombre(){ $returnValue = (string) ''; **$returnValue = $this->nombre;** return (string) $returnValue; } public function setNombre($pNombre) { **$this->nombre = $pNombre;** } public function getApellido() { $returnValue = (string) ''; **$returnValue = $this->apellido;** return (string) $returnValue; } public function setApellido($pApellido) { **$this->apellido = $pApellido;** } public function __toString() { $returnValue = (string) ''; **$returnValue = "{$this->apellido}, {$this->nombre}";** return (string) $returnValue; } } /* end of abstract class logic_Persona */

**7. Testeamos: Abrimos el archivo test.php de la raiz

  1. implementamos la clase Curso, esta se implementará de tres Interfaces (su implementación es equivalente a un ArrayIterator o ArrayObject): logic/class.Curso.php**
valid()) return false; if(empty($this->oAlumnos[$this->puntero])) return array(); return $this->oAlumnos[$this->puntero]; } public function **next** (){ return ++$this->puntero; } public function **key** (){ return $this->puntero; } public function **rewind** (){ $this->puntero = 0; } public function **valid** (){ return ($this->puntero < count($this->oAlumnos)); } public function **count** (){ return (count($this->oAlumnos)); } public function **offsetExists** ($offset){ $returnValue = false; if(array_key_exists($offset,$this->oAlumnos)) $returnValue = true; return $returnValue; } public function **offsetGet** ($offset){ $returnValue = false; if($this->offsetExists($offset)) $returnValue = $this->oAlumnos[$offset]; return $returnValue; } public function **offsetSet** ($offset,$value){ if($this->offsetExists($offset) && ($value instanceof logic_Alumno) ) array_splice($this->oAlumnos,$offset,1,$value); } public function **offsetUnset** ($offset){ if($this->offsetExists($offset)) array_splice($this->oAlumnos,$offset,1); } Iterator Countable ArrayAccess

public function __construct() { $this->puntero = 0; } public function load() { //TODO falta } public function __get ($propiedad) { if(isset($this->$propiedad) ) $returnValue = $this->$propiedad; else $returnValue = null; } public function __set ($propiedad, $valor) { $returnValue = (bool) false; if(isset($this->$propiedad)) $this->$propiedad = $valor; else $returnValue = false; return (bool) $returnValue; } public function append( logic_Alumno $oAlumno) { $this->oAlumnos[] = $oAlumno; } public function getProfesor() { $returnValue = null; $returnValue = $this->oProfesor; return $returnValue; } public function setProfesor(logic_Profesor $pProfesor) { $this->oProfesor = $pProfesor; } public function getArrayCopy(){ return (array) $this->oAlumnos; } public function exchangeArray($array){ $this->oAlumnos = $array; } } /* end of class logic_Curso */ Getter y Setters

function borrarProfesor($id=-1){ global $errorMessage; if($_SESSION['Profesores']->offsetExists($id)){ $_SESSION['Profesores']->offsetUnset($id); header("Location: profesorCtrl.php"); }else { $errorMessage = 'Error el código no existe'; listarProfesores(); } } function insertarProfesor($espec='',$nombre='',$apellido=''){ global $errorMessage; if(strlen($nombre)<=2) $errorMessage = 'Error Insertando el Nombre'; elseif(strlen($apellido)<=2) $errorMessage = 'Error Insertando el Apellido'; if(strlen($espec)<=2) $errorMessage = 'Error Insertando el Especialidad'; else{ $pro = new logic_Profesor(); $pro->setNombre($nombre); $pro->setApellido($apellido); $pro->setNoEspecialidad($espec); $_SESSION['Profesores']->append($pro); header("Location: profesorCtrl.php"); return 0; } verForminsercion($espec,$nombre,$apellido); } if(!isset($_GET['cmd']))$_GET['cmd']=''; switch ($_GET['cmd']){ case 'listar' : listarProfesores();break; case 'insertar' : insertarProfesor($_POST['fEspecialidad'], $_POST['fNombre'], $_POST['fApellido']);break; case 'actualizar' : break; case 'borrar' : borrarProfesor($_GET['id']);break; case 'verforminsert' : verForminsercion();break; default: listarProfesores(); } ?>

11. Implementar cursoCtrl.php

getArrayCopy(); if(isset($_SESSION['Curso'])){ if($nombre == '')$nombre = $_SESSION['Curso']->noCurso; if($idProfesor == ''){ $prof= $_SESSION['Curso']->getProfesor(); $idProfesor = $prof->getCoProfesor(); } }** include 'vistas/cursoFormView.php'; } function insertarCurso($coCurso=0,$noCurso='',$idProf = 0){ global $errorMessage; if(strlen($coCurso)<=0) $errorMessage = 'Error Insertando el Codigo del curso'; elseif(strlen($noCurso)<=2) $errorMessage = 'Error Insertando el Nombre del Curso'; elseif(!$_SESSION['Profesores']->offsetExists($idProf)) $errorMessage = 'Error Insertando el Profesor '.$idProf; else{ **$profesor = $_SESSION['Profesores']->offsetGet($idProf); if(isset($_SESSION['Curso'])){ $_SESSION['Curso']->cocurso = $coCurso; $_SESSION['Curso']->nocurso = $noCurso; $_SESSION['Curso']->setProfesor($profesor); }else{ $_SESSION["Curso"] = new logic_Curso($coCurso,$noCurso,$profesor); $_SESSION['Curso']->cocurso = $coCurso; $_SESSION['Curso']->nocurso = $noCurso; $_SESSION['Curso']->setProfesor($profesor); }** } verForminsercion($noCurso,$idProf); } … …

Ejercicio2: Implementando el Patrón Active Record

Notas previas:

  • Es recomendable no utilizar parámetros en constructor
  • Los atributos de las “clases entity” o de “clases de datos” o “Active Table” deben de estar en minúsculas.
  • La visibilidad de los atributos de la “clase entity” debe de ser: “protected”
  • Se debe crear el atributo público: $_table cuyo valor inicial debe ser el nombre de la tabla. 1. logic/class.DB.php require_once ("adodb5/adodb.inc.php"); require_once ("adodb5/adodb-active-record.inc.php"); require_once ("adodb5/adodb-exceptions.inc.php"); class logic_DB{ private function __construct(){} public static function conn(){ $returnValue = null; static $conn; if(!$conn) { $conn = NewADOConnection("mysql"); $conn->connect("localhost","root","123456","test"); $conn->setFetchMode(ADODB_FETCH_ASSOC); $conn->debug = 0; ADODB_Active_Record::SetDatabaseAdapter($conn); } $returnValue = $conn; return $returnValue; } } /* end of class logic_DB */ 2. Modificando la clase abstracta Persona: abstract class logic_Persona extends ADODB_Active_Record { protected $nombre = ''; protected $apellido = ''; public function __construct($nombre, $apellidos){ parent::__construct(); $this->nombre = $nombre; $this->apellido = $apellidos; } public function getNombre(){ $returnValue = (string) ''; $returnValue = $this->nombre; return (string) $returnValue; } ... ...

3. Modificando la clase abstracta Profesor: class logic_Profesor extends logic_Persona { protected $coprofesor = 0; protected $noespecialidad = ''; public $_table = 'Profesor'; public function __construct() { parent::__construct('',''); } ... 4. Modificando la clase abstracta ColeccionProfesores: class logic_ColeccionProfesores extends ArrayObject{ public function __construct(){ parent::__construct(); $this->load(); }

public function append( logic_Profesor $oProfesor){

try{ $oProfesor->Save(); parent::append($oProfesor); } catch (ADODB_Exception $e) { return false; } catch (Exception $e) { return false; } return true; }

public function offsetUnset($offset){

$table = 'Profesor'; try{ $conn = logic_DB::conn(); if($this->offsetExists($offset)){ $profesor = $this->offsetGet($offset); $conn->Execute("DELETE FROM $table WHERE coPro- fesor={$profesor->getCoProfesor()}"); parent::offsetUnset($offset); } } catch (ADODB_Exception $e) { return false; } catch (Exception $e) { return false; } return true; } public function load(){ $table = 'Profesor'; $conn = logic_DB::conn(); $array = $conn->GetActiveRecordsClass('logic_Profesor',$table); $this->exchangeArray($array);