Diferencia entre revisiones de «Usuario:ManuelRomero/DAW/Distancia/2015/tutorias/tutoria1/»
De WikiEducator
(5 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 67: | Línea 67: | ||
Cuando en un programa principal, voy a usar clases en de incluir los ficheros que contengan la implementación de las clases | Cuando en un programa principal, voy a usar clases en de incluir los ficheros que contengan la implementación de las clases | ||
− | Por lo que si tuvierámso la siguiente estructura de clases | + | Por lo que si tuvierámso la siguiente estructura de clases que se muestra en el ejemplo |
+ | [[Archivo:tree_clases.png]] | ||
+ | *Cada clase lo único que va a hacer es en el constructor escribir un texto (es solo un ejemplo) | ||
+ | <source lang=php> | ||
+ | class A { | ||
+ | public function __construct() { | ||
+ | echo "<h2>Estoy cargando un objeto A</h2>"; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | *Si en un programa principal queremos usar estas clases , tendríamos q | ||
+ | ue '''''requerir''''' cada fichero | ||
+ | <source lang=php> | ||
+ | |||
+ | require "A.php"; | ||
+ | require "B.php"; | ||
+ | require "C.php"; | ||
+ | require "D.php"; | ||
+ | require "E.php"; | ||
+ | |||
+ | |||
+ | $a = new A(); | ||
+ | $b = new B(); | ||
+ | $c = new C(); | ||
+ | $d = new D(); | ||
+ | $e = new E(); | ||
+ | </source> | ||
+ | *Pero si cada fichero está nombrado con el nombre de la clase, podemos usar una función de autocarga | ||
+ | *Esta función es invocada de forma implícita cada vez que se instancia un objeto de una clase. En su invocación '''''recibe como parámetro un a función de callback que tiene el nombre de esa clase como parámetro''''' | ||
+ | *Usando este hecho podríamos hacer | ||
+ | *Esta función se llama '''''spl_autload_register(){}''''' | ||
+ | *La función que recibe de parámetro no nos importa el nombre, por lo que la podemos usar como una función anónima | ||
+ | |||
+ | <source lang=php> | ||
+ | spl_autoload_register(function ($variable_nombre_clase) {}); | ||
+ | </source> | ||
+ | *Ahora tocaría poner código en esa función que tiene el parámetro nombre de la clase que queremos cargar | ||
+ | <source lang=php> | ||
+ | spl_autoload_register(function ($clase) { | ||
+ | require ("$clase.php"); | ||
+ | }); | ||
+ | |||
+ | $a = new A(); | ||
+ | $b = new B(); | ||
+ | $c = new C(); | ||
+ | $d = new D(); | ||
+ | $e = new E(); | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ===Examen de primera evaluación=== | ||
+ | *El examen constará de dos partes | ||
+ | ;Teoría | ||
+ | ;Práctica | ||
+ | ====Teoría==== | ||
+ | *Serán 20 preguntas de respuesta corta, de tipo teórico/práctica | ||
+ | *En este apartado '''''no se puede usar apuntes extras''''' y se realiza sobre el papel | ||
+ | *Ejemplo de posibles preguntas | ||
+ | {{Plegable|hide|Pregunta ejemplo examen| | ||
+ | ;Expón los tipos de los valores establecidos en el punto 1 y en el punto 2, así como los valores | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $valor = 9; //(punto 1) | ||
+ | if ($valor = 6){ //(punto 2) | ||
+ | echo "estoy en la sección if"; | ||
+ | }else{ | ||
+ | echo "Estoy en la sección else"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | ;Observa el siguiente código php e indica qué se visualizaría ejecutándolo, o si este código genera algún tipo de error y por qué | ||
+ | <source lang=php> | ||
+ | $a=6; | ||
+ | $b=5; | ||
+ | if (($a==5) and ($b++)==6)) | ||
+ | echo "valor de \$a = $a y valor de \$b=$b"; | ||
+ | else | ||
+ | echo "valor de \$b = $b"; | ||
+ | |||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | ====Práctica==== | ||
+ | *Será un ejercicio práctico que hay que implementar en el ordenador | ||
+ | *No se pide que funcione, si no que esté bien planteado y organizado | ||
+ | *Por ejemplo este año planteamos resolver el juego de mastermind más simplificado que como se ha planteado en las prácticas | ||
+ | *Para esta parte del examen sí que se puede usar ordenador y todo el material que queráis, pero '''''no se puede acceder a internet''''' | ||
+ | *Se podrá preguntar y se resolverán cuestiones de cómo se llama una determinada función que sé que hace tal cosa. | ||
+ | *Todo lo que se diga para una alumna, se pondrá en común para todos en la pizarra, o se dirá en voz alta. | ||
+ | *Si no traes equipo se dispondrá de uno en el aula con ubuntu como SO, netbeans como edi, e instalado apache como servidor web | ||
</div> | </div> |
Última revisión de 23:59 24 ene 2020
|
- La programación orientada a objetos
- Se revisa las peculiaridades de php como lenguaje orientado a objetos
- Se insiste en leer el wiki a pesar de que a veces pueda parecer un poco desordenado. pero es información importante. Cualquier cuestión que no quede clara o que se vea incompleta se debería comentar para solvertarlo.
- En php hay dos aspecto peculiares sobre OOP
- Que no permite la sobrecarga/polimorfismo como la entendemos en otros lenguajes como java
- Que tiene lo que se llama métodos mágicos que son métodos que no se invocan de forma explícita, si no que implícitamente se invocas (si es que se han implementado) cuando ocurre algo
- Sobre la primera cuestión se trabaja el ejemplo del racional:
- Suponemos que queremos tener las siguientes opiciones de instanciar objetos
$r1 = new Racional(); // 1/1 $r2 = new Racional(6); // 6/1 $r3 = new Racional(7, 4); // 7/4 $r4 = new Racional("9/4"); //9/6
- En este caso queremos sobre cargar el constructor. En php no se pueden crear métodos con el mismo nombre
- Entonces lo que hacemos es crerar un solo método que tenga el máximo número de parámetros con el que se pueda invocar (en este caso 2) y con valores por defecto para aquellos que podrían no aparecer (en este caso los dos
class Racional { //put your code here private $num; private $den; public function __construct($num = null, $den = null) {
- Ahora en el método empezamos a interrogar sobre si existe o no el parámetro y el tipo de dato
- En este caso creamos este código, claramente sin optimizar ...
public function __construct($num = null, $den = null) { if ($num == null) { //new Racional() $this->num = 1; $this->den = 1; } else { if ($den == null) { if (is_numeric($num)) { // new Racional(5) $this->num = $num; $this->den = 1; } else { //new Racional("9/4"); $v = explode("/", $num); $this->num = $v[0]; $this->den = $v[1]; } } else { //new Racional (5,6) $this->num = $num; $this->den = $den; }//end if/else $den ==null } }
- Autocarga de clases
Sobre la autocarga de clases, se ha comentado como en php si seguimos las buenas prácticas de programación se debe de implementar cada clase en un fichero que tenga su nombre Cuando en un programa principal, voy a usar clases en de incluir los ficheros que contengan la implementación de las clases
Por lo que si tuvierámso la siguiente estructura de clases que se muestra en el ejemplo
- Cada clase lo único que va a hacer es en el constructor escribir un texto (es solo un ejemplo)
class A { public function __construct() { echo "<h2>Estoy cargando un objeto A</h2>"; } }
- Si en un programa principal queremos usar estas clases , tendríamos q
ue requerir cada fichero
require "A.php"; require "B.php"; require "C.php"; require "D.php"; require "E.php"; $a = new A(); $b = new B(); $c = new C(); $d = new D(); $e = new E();
- Pero si cada fichero está nombrado con el nombre de la clase, podemos usar una función de autocarga
- Esta función es invocada de forma implícita cada vez que se instancia un objeto de una clase. En su invocación recibe como parámetro un a función de callback que tiene el nombre de esa clase como parámetro
- Usando este hecho podríamos hacer
- Esta función se llama spl_autload_register(){}
- La función que recibe de parámetro no nos importa el nombre, por lo que la podemos usar como una función anónima
spl_autoload_register(function ($variable_nombre_clase) {});
- Ahora tocaría poner código en esa función que tiene el parámetro nombre de la clase que queremos cargar
spl_autoload_register(function ($clase) { require ("$clase.php"); }); $a = new A(); $b = new B(); $c = new C(); $d = new D(); $e = new E();
Examen de primera evaluación
- El examen constará de dos partes
- Teoría
- Práctica
Teoría
- Serán 20 preguntas de respuesta corta, de tipo teórico/práctica
- En este apartado no se puede usar apuntes extras y se realiza sobre el papel
- Ejemplo de posibles preguntas
Pregunta ejemplo examen |
---|
<?php $valor = 9; //(punto 1) if ($valor = 6){ //(punto 2) echo "estoy en la sección if"; }else{ echo "Estoy en la sección else"; } ?>
$a=6; $b=5; if (($a==5) and ($b++)==6)) echo "valor de \$a = $a y valor de \$b=$b"; else echo "valor de \$b = $b"; |
Práctica
- Será un ejercicio práctico que hay que implementar en el ordenador
- No se pide que funcione, si no que esté bien planteado y organizado
- Por ejemplo este año planteamos resolver el juego de mastermind más simplificado que como se ha planteado en las prácticas
- Para esta parte del examen sí que se puede usar ordenador y todo el material que queráis, pero no se puede acceder a internet
- Se podrá preguntar y se resolverán cuestiones de cómo se llama una determinada función que sé que hace tal cosa.
- Todo lo que se diga para una alumna, se pondrá en común para todos en la pizarra, o se dirá en voz alta.
- Si no traes equipo se dispondrá de uno en el aula con ubuntu como SO, netbeans como edi, e instalado apache como servidor web