Diferencia entre revisiones de «Usuario:ManuelRomero/DAW/Distancia/2015/tutorias/tutoria1/»

De WikiEducator
Saltar a: navegación, buscar
 
(8 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/DAW/distancia/tutorias/nav}}
 
{{:Usuario:ManuelRomero/DAW/distancia/tutorias/nav}}
 
__NOTOC__
 
__NOTOC__
 
+
<div id=parrafo>
 
<br/>
 
<br/>
 
{{MRM_Objetivos|
 
{{MRM_Objetivos|
;Se han tratado dos temas
 
#Conceptos básicos de la programación web
 
#Introducción a la programación php
 
}}
 
  
 +
;Se han tratado 3 temas fundamentalmente
  
===Conceptos básicos del desarrollo web===
+
#La programación orientada a objetos
*Se ha visto el siguiente wiki
+
#La práctica de la calculadora
http://es.wikieducator.org/Usuario:ManuelRomero/ProgramacionWeb/Conceptos_Generales
+
#El examen de primera evaluación
*Importante es ver la programación web es diferente de la programación de escritorio
+
*El punto crucial es que la programación web es un desarrollo donde la ejecución está basada en un entorno cliente/servidor. Tanto la solicitud, como la respuesta entre cliente y servidor se realiza  usando el  protocolo '''''http''''', protocolo sin estado, lo que implica que el servidor no almacena información de las peticiones.Tendremos maneras de poder guardar esta información.
+
{{MRM_ejemplo|Como ejemplo El cliente  no podrá saber las veces que visita una página manteniendo en el servidor una variable contador y cada vez que visito la página la incremento y visualizo. Este ejemplo está desarrollado en los apuntes en el apartado de formularios.
+
 
}}
 
}}
*Al final se ve un comando llamado '''''curl''''' que es interesante para transferir ficheros y ver cabeceras http
+
;La programación orientada a objetos
*Puede ser una alternativa a '''''wget'''''
+
*Se revisa las peculiaridades de php como lenguaje orientado a objetos
*También ver la diferencia entre arquitectura web la cual muchas veces te implica usar unas tecnologías o entornos de desarrollo, los cuales suelen ir ligados, pero podremos tomar otras opciones
+
*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.
Por ejemplo el lenguaje de programación del entorno servidor '''''php''''' se lleva muy bien con '''''mysql o maria''''', pero no habría problema en usar otra base de datos relacional o incluso usar otra BD no tipo sql como '''''mongo''''' '''(base de datos documental)'''.
+
*En php hay dos aspecto peculiares sobre OOP
*Comentamos las instalaciones
+
*En el wiki están explicadas para instalarlas con ubuntu
+
*Yo lo he hecho bajo la vesión ubuntu 16:04
+
  
===Prácticas===
+
#Que no permite la sobrecarga/polimorfismo como la entendemos en otros lenguajes como java
Se proponen 2 practicas sobre el primer tema que están expuestas en la plataforma
+
#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:
  
===Programación con php===
+
*Suponemos que queremos tener las siguientes opiciones de instanciar objetos
*Php es un lenguaje interpretado que usaremos en el servidor
+
*Comentamos dos características fundamentales para mí de php
+
{{MRM_Puntos clave|Title= Lenguaje PHP
+
'''''Lenguaje de tipado dinámico
+
'''''Lenguaje muy orientado a expresiones }}
+
*Las variables en php tienen tipo. El tipo depende del valor que tengan asignado, el cual puede cambiar en cualquier momento
+
*Una expresión en php también tiene tipo y es quien manda. Si yo tengo una expresión de suma '''''+''''' la expresión es numérica y los operandos sean del tipo que sean se convierten a enteros
+
 
<source lang=php>
 
<source lang=php>
$a=5; //tipo entero
+
$r1 = new Racional(); // 1/1
$b="pedro";//tipo cadena
+
$r2 = new Racional(6); // 6/1
$c = true; /tipo booleano
+
$r3 = new Racional(7, 4); // 7/4
$d = $a+$b+$c; //sumará 5 + 0 que es la conversión de "pedro" a entero + 1 que es la conversión de true a entero
+
$r4 = new Racional("9/4"); //9/6
echo $d  //visualiza 6
+
 
</source>
 
</source>
 +
*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
 +
<source lang=php>
 +
class Racional {
 +
//put your code here
 +
private $num;
 +
private $den;
 +
 +
public function __construct($num = null, $den = null) {
 +
 +
</source>
 +
*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 ...
 +
<source lang=php>
 +
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
 +
    }
 +
}
 +
</source>
 +
;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
 +
[[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>

Última revisión de 22:59 24 ene 2020





Icon objectives.jpg
Objetivo
Se han tratado 3 temas fundamentalmente
  1. La programación orientada a objetos
  2. La práctica de la calculadora
  3. El examen de primera evaluación
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
  1. Que no permite la sobrecarga/polimorfismo como la entendemos en otros lenguajes como java
  2. 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 Tree clases.png

  • 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

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