Ejercicio N° 1

Cargar a través de un formulario los datos de un postulante para un puesto
de trabajo. Los datos son los siguientes:
● Nombre y Apellido
● Fecha de nacimiento
● Dirección
● Sexo
● Disponibilidad (medio tiempo o full time)
● Puesto (informática, contable, rrhh)
● Cargar CV (archivo de cualquiera de los 3 tipos: .pdf, .doc, .jpg)
Al enviar el formulario, mostrar por pantalla un mensaje de confirmación:
“El postulante [Nombre y Apellido] se inscribió en el puesto [Puesto]“.


<!DOCTYPE html> <!-- Esto declara que estás usando HTML5, asegúrate de que siempre esté en tus documentos HTML -->
<html>
<head>
<!-- Esta parte del documento proporciona información general que no se muestra en la página web. Es como la información detrás de escena. -->
<!-- Establece el formato y la codificación de caracteres para que se muestre correctamente en el navegador -->
<meta name="tipo_contenido" content="text/html;" http-equiv="content-type" charset="utf-8">
<!-- Es el título que se verá en la pestaña del navegador; asegúrate de que sea descriptivo -->
<title>Formulario de postulación</title>
</head>
<body> <!-- Aquí es donde comienza la magia, todo lo que pongas aquí se mostrará en tu página -->
<!-- Empezamos con nuestro formulario. Cuando lo envíen, llevará al usuario a "procesar_formulario.php". Usamos POST porque es seguro para enviar datos sensibles. -->
<form action="procesar_formulario.php" method="post" enctype="multipart/form-data">
<!-- Aquí es donde los postulantes escribirán sus nombres y apellidos. Simple y directo. -->
Nombre y Apellido: <input type="text" name="nombre"><br>
<!-- Este input permite a los postulantes seleccionar su fecha de nacimiento -->
Fecha de nacimiento: <input type="date" name="fecha"><br>
<!-- Dirección del postulante, otro input de texto simple -->
Dirección: <input type="text" name="direccion"><br>
<!-- Aquí pueden escribir su sexo. Podrías considerar cambiarlo a un menú desplegable en el futuro. -->
Sexo: <input type="text" name="sexo"><br>
<!-- Menú desplegable para la disponibilidad. Pueden elegir entre 'Medio Tiempo' y 'Full Time'. -->
Disponibilidad: 
<select name="disponibilidad">
<option value="medio tiempo">Medio Tiempo</option>
<option value="full time">Full Time</option>
</select><br>
<!-- Otro menú desplegable, esta vez para el puesto al que postulan. Tienen tres opciones. -->
Puesto: 
<select name="puesto">
<option value="informatica">Informática</option>
<option value="contable">Contable</option>
<option value="rrhh">RRHH</option>
</select><br>
<!-- Un input para cargar el CV del postulante. Pueden cargar .pdf, .doc, .jpg, como solicitaste. -->
Cargar CV: <input type="file" name="cv"><br>
<!-- Finalmente, un botón para enviar el formulario. ¡No olvides este detalle! -->
<input type="submit" value="Enviar">
</form>
</body>
</html>



<?php
// Verificamos si este script fue llamado mediante una solicitud POST. 
// Esto ayuda a evitar que alguien simplemente visite el archivo y cause comportamientos no deseados.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Aquí estamos obteniendo el valor del campo 'nombre' del formulario que fue enviado.
// Es el nombre del postulante que ingresaron en el formulario.
$nombre = $_POST['nombre'];
// De manera similar, obtenemos el puesto al que el postulante quiere postularse.
$puesto = $_POST['puesto'];
// Finalmente, mostramos un mensaje en la página que confirma que el postulante se ha inscrito para el puesto.
echo "El postulante " . $nombre . " se inscribió en el puesto " . $puesto . ".";
}
?>


Ejercicio N° 2

Usando herencia realice dos clases una Postulante y la otra Empleado, que
hereden de la clase Persona.
* Los datos de la clase Postulante son los mismos que se ingresan por formulario en el punto 1.
* Esta clase debe permitir calcular la edad del postulante.
* Los datos que se guardan de la clase Empleado son:
* Nombre y Apellido
* Fecha de nacimiento
* Dirección
* Sexo
* Disponibilidad (medio tiempo o full time)
* Puesto (informática, contable, rrhh)
* Fecha de ingreso
* Esta clase debe permitir calcular los años de antigüedad del empleado


<?php
// Definición de la clase 'Persona' que será la base para 'Postulante' y 'Empleado'.
class Persona {
// Propiedades protegidas, esto significa que las clases hijas pueden accederlas, pero desde fuera de la clase no.
protected $nombre;
protected $apellido;
// ... otros atributos ...
// Constructor de la clase, inicializa las propiedades con los valores pasados al crear un objeto.
public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto) {
$this->nombre = $nombre;
// ... inicialización de otros atributos ...
}
}
// La clase 'Postulante' hereda de 'Persona' y tiene características adicionales.
class Postulante extends Persona {
private $cv;  // Propiedad específica de 'Postulante' para guardar el CV.
// Constructor que también inicializa el CV además de las propiedades heredadas.
public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto, $cv) {
parent::__construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto);  // Llama al constructor de 'Persona'.
$this->cv = $cv;  // Inicializa el CV.
}
// Método que calcula la edad del postulante basado en su fecha de nacimiento.
public function calcularEdad() {
// ... lógica de cálculo ...
return $edad->y;  // Retorna la edad.
}
}
// La clase 'Empleado' también hereda de 'Persona' pero tiene características distintas a 'Postulante'.
class Empleado extends Persona {
private $fechaIngreso;  // Propiedad específica para guardar la fecha en que el empleado ingresó.
// Constructor que inicializa la fecha de ingreso además de las propiedades heredadas.
public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto, $fechaIngreso) {
parent::__construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto);  // Llama al constructor de 'Persona'.
$this->fechaIngreso = $fechaIngreso;  // Inicializa la fecha de ingreso.
}
// Método que calcula los años de antigüedad del empleado en base a su fecha de ingreso.
public function calcularAntiguedad() {
// ... lógica de cálculo ...
return $antiguedad->y;  // Retorna los años de antigüedad.
}
}
?>


Ejercicio N° 3

Agregue un método estático a la clase Empleado del punto anterior que permita mostrar los puestos existentes (informática, contable, rrhh). Muestre por pantalla el resultado de ejecutar dicho método.


<?php
// Incluye y evalúa el archivo especificado, 'demoejercicio2.php', que se espera contenga la definición de la clase 'Empleado'.
require_once 'demoejercicio2.php';
// Define una nueva clase 'EmpleadoEjercicio3' que extiende (hereda) de la clase 'Empleado'.
class EmpleadoEjercicio3 extends Empleado {
// Propiedad estática, que pertenece a la clase en sí y no a una instancia de la clase.
public static $puestos = ["Informática", "Contable", "RRHH"];
// Método estático que imprime todos los puestos disponibles.
public static function mostrarPuestos() {
// Recorre el array estático de puestos y los imprime.
foreach (self::$puestos as $puesto) {
echo $puesto . "<br>";
}
}
}
// Llama al método estático 'mostrarPuestos()' de la clase 'EmpleadoEjercicio3'.
// No es necesario instanciar la clase para llamar a este método porque es estático.
EmpleadoEjercicio3::mostrarPuestos();
?>


Ejercicio N° 4

Implementar el polimorfismo (varias formas de resolver un mismo método) para calcular el sueldo de tres tipos de Empleados:
Empleado Informático:
Sueldo = $básico + $xcantidadAplicaciones
★ $básico = $200.000
★ 1-5 aplicaciones = $10.000
★ 6 o más aplicaciones = $20.000
Empleado de RRHH:
Sueldo = $básico + $xcantidadProyectos
★ $básico = $300.000
★ 1-5 proyectos = $20.000
★ 6 o más proyectos = $30.000
Empleado Contable:
Sueldo = $básico + $xcantidadExpedientes
★ $básico = $100.000
★ 1-5 expedientes = $50.000
★ 6 o más expedientes = $80.000
Muestre el sueldo de un empleado Informático con 10 aplicaciones.

Sugerencia: Puede utilizar una clase donde estará el método calcSueldo() para su posterior implementación particular por cada tipo de Empleado.


<?php
// Se incluye y evalúa el archivo 'demoejercicio2.php', que se espera contenga la definición de la clase 'Persona'.
require_once 'demoejercicio2.php';
// Se define una clase abstracta 'EmpleadoConSueldo' que extiende de 'Persona'.
abstract class EmpleadoConSueldo extends Persona {
// Propiedades protegidas, accesibles solo por esta clase y sus subclases.
protected $fechaIngreso;
protected $cantidad;
// Constructor que inicializa las propiedades.
public function __construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto, $fechaIngreso, $cantidad) {
// Llamada al constructor de la clase padre 'Persona'.
parent::__construct($nombre, $apellido, $fechaNacimiento, $direccion, $sexo, $disponibilidad, $puesto);
// Inicialización de propiedades específicas de 'EmpleadoConSueldo'.
$this->fechaIngreso = $fechaIngreso;
$this->cantidad = $cantidad;
}
// Método abstracto que obliga a las clases que extienden 'EmpleadoConSueldo' a implementarlo.
abstract protected function calcularSueldo();
}
// Subclase que extiende 'EmpleadoConSueldo' y representa un empleado informático.
class EmpleadoInformatico extends EmpleadoConSueldo {
// Método para calcular sueldo específico para empleados informáticos.
public function calcularSueldo() {
$basico = 200000;
$extra = $this->cantidad <= 5 ? 10000 : 20000;
return $basico + $extra;
}
}
// Subclase para empleados de RRHH.
class EmpleadoRRHH extends EmpleadoConSueldo {
// Método para calcular sueldo específico para empleados de RRHH.
public function calcularSueldo() {
$basico = 300000;
$extra = $this->cantidad <= 5 ? 20000 : 30000;
return $basico + $extra;
}
}
// Subclase para empleados contables.
class EmpleadoContable extends EmpleadoConSueldo {
// Método para calcular sueldo específico para empleados contables.
public function calcularSueldo() {
$basico = 100000;
$extra = $this->cantidad <= 5 ? 50000 : 80000;
return $basico + $extra;
}
}
// Instancia de un empleado informático y muestra su sueldo.
$empleadoInformatico = new EmpleadoInformatico("Juan", "Perez", "1990-01-01", "Calle 123", "Masculino", "Full Time", "Informatico", "2023-01-01", 10);
echo "El sueldo del empleado informático es: $" . $empleadoInformatico->calcularSueldo();
?>