Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Proyecto para clase

Estas en el tema de Proyecto para clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno gente, me mandaron hacer un proyecto para clase en php, orientado a objetos, y esta es mi primer aplicacion 100% orientada a objetos que ...
  #1 (permalink)  
Antiguo 23/11/2008, 17:28
 
Fecha de Ingreso: febrero-2008
Mensajes: 33
Antigüedad: 16 años, 2 meses
Puntos: 1
Proyecto para clase

Bueno gente, me mandaron hacer un proyecto para clase en php, orientado a objetos, y esta es mi primer aplicacion 100% orientada a objetos que estoy haciendo.
Voy a poner la letra de lo que tengo que hacer, y a continuacion el codigo de las clases.
Espero que me digan que cambiarian ustedes, quiero hacerlo perfecto esta entrega. :P

Cita:
Una empresa de ventas de pasajes aereos solicita una aplicacion web, que permita la reserva de pasajes via Internet. Luego de reunirnos en varias oportunidades con los encargados de la empresa acordamos en realizar la misma con la siguiente informacion:

1) La empresa desea almacenar los vuelos, los que tienen un numero (unico) una fecha, una hora y un destino.

2) Para cada vuelo la empresa permite realizar via Web reservas, de las que se conoce el vuelo, el asiento, y la fila (estos tres datos hacen unica la reserva), el documento de identidad, el nombre y el apellido.

3) Asi mismo al empresa manifiesta la necesidad de obtener la siguiente informacion resultante del sistema:

a) Dado un vuelo la cantidad de asientos reservados y libres del mismo.
b) Dado una cedula de identidad, los pasajes reservados por ese mismo apsajero en todos los vuelos.
c) El vuelo con mayor cantidad de asientos reservados.
d) El vuelo con la menor cantidad de asientos reservados.
f) El listado de pasajeros de un vuelo dado


Se pide:
1) Dar de alta, baja, modificar y visualizar los vuelos que la empresa maneja con la informacion que nos suministraron para ellos. Importante no se puede dar de baja un vuelo que tenga reservas realizadas.

2) Dar de alta, baja, modificar y visualizar las reservas sobre los vuelos, definidos en el punto 1.

3) Poder ejecutar los listados solicitados sobre la informacion cargada
class.vuelo.php
Código PHP:
<?php
    
final class Vuelo {
        private 
$unaColReservas;
        private 
$mNumero;
        private 
$mFecha;
        private 
$mHora;
        private 
$mAsientos;
        private 
$mDestino;
        
        public function 
getAtributo($atributo)
        {
            return 
$this->$atributo;
        }
        
        public function 
__construct($numero$fecha$hora$asientos$destino)
        {
            
$this->mNumero $numero;
            
$this->mFecha $fecha;
            
$this->mHora $hora;
            
$this->mAsientos $asientos;
            
$this->mDestino $destino;
            
            if (
$this->__tieneReservas())
                
$result mysql_db::sql_query("select * from reservas WHERE idvuelo='"$this->mNumero "' ORDER by apellido ASC");
                while (
$row mysql_db::sql_fetchrow($result))
                {
                    
$pasajero = new Pasajero($row[documento], $row[nombre], $row[apellido]);
                    
$reserva = new Reserva($row[idvuelo], $row[asiento], $row[fila], $pasajero);
                    
$this->unaColReservas[] = $reserva;
                }
        }
        
        public function 
AgregarDB()
        {
            
$retorno false;
            
            
$result mysql_db::sql_query("INSERT INTO `vuelos` (`id`, `fecha`,`hora`,`asientos`,`destino`) VALUES ('"$this->mNumero "', '"$this->mFecha "', '" $this->mHora "', '"$this->mAsientos "', '"$this->mDestino "');");
            if (
$result)
            {
                
$retorno true;
            }
            
            return 
$retorno;
        }
        
        public function 
borrarDB()
        {
            
$retornofalse;
            if (!
$this->__tieneReservas())
            {
                
$result mysql_db::sql_query("DELETE FROM `vuelos` WHERE id='"$this->mNumero "'");
                if (
$result)
                {
                    
$retorno true;
                }
            }
            else
            {
                die(
"Este vuelo no puede ser borrado porque tiene reservas hechas");
            }
            return 
$retorno;
        }
        
        public function 
modificarDB($fecha$hora$destino)
        {
            
$retorno false;
            
$result mysql_db::sql_query("UPDATE `vuelos` SET `fecha` = '$fecha', `hora` = ' $hora', `destino` = '$destino' WHERE id='"$this->mNumero "'");
            if (
$result)
            {
                
$this->mFecha $fecha;
                
$this->mHora $hora;
                
$this->mDestino $destino;
                
                
$retorno true;
            }
            return 
$retorno;
        }
        
        public function 
__tieneReservas()
        {
            
$result mysql_db::sql_query("select * from reservas WHERE idvuelo='"$this->mNumero "'");
            
$retorno false;
            if (
mysql_db::sql_numrows($result))
                
$retorno true;
                
            return 
$retorno;
        }
        
        public function 
__toString()
        {
            return 
"Vuelo n. <b>" $this->mNumero "</b> - Fecha: <b>" $this->mFecha "</b> - Hora: <b>" $this->mHora "</b> - Destino: <b>" $this->mDestino "</b>";
        }
    }
?>
class.reserva.php
Código PHP:
<?php
    
final class Reserva {
        private 
$mNumero;
        private 
$mAsiento;
        private 
$mFila;
        private 
$mPasajero;
        
        public function 
getAtributo($atributo)
        {
            return 
$this->$atributo;
        }
        
        public function 
__construct($numero$asiento$fila$pasajero)
        {
            
$this->mNumero $numero;
            
$this->mAsiento $asiento;
            
$this->mFila $fila;
            
$this->mPasajero $pasajero;
        }
        
        public function 
AgregarDB()
        {
            
$retorno false;
            
            if (
$this->__comprobarDisponibilidad())
            {
                
$result mysql_db::sql_query("select asiento, fila from reservas WHERE idvuelo='"$this->mNumero "' AND (asiento='"$this->mAsiento "' AND fila='"$this->mFila "')");
                if (
mysql_db::sql_numrows($result)==0)
                {
                    
$numero $this->mNumero;
                    
$asiento $this->mAsiento;
                    
$fila $this->mFila;
                    
$documento $this->mPasajero->getAtributo('mDocumento');
                    
$nombre $this->mPasajero->getAtributo('mNombre');
                    
$apellido $this->mPasajero->getAtributo('mApellido');
                    
                    
$result mysql_db::sql_query("INSERT INTO `reservas` (`idvuelo`,`asiento`,`fila`,`documento`,`nombre`,`apellido`) VALUES ('$numero','$asiento','$fila','$documento','$nombre','$apellido');");
                    
                    if (
$result)
                    {
                        
$retorno true;
                    }
                }
                else
                {
                    die(
"Actualmente hay una reserva en ese asiento de la fila <b>$fila</b>");
                }
            }
            else
            {
                die(
"No hay cupos disponibles para esta reserva");
            }
            return 
$retorno;
        }
        
        public function 
modificarDB($asiento$fila$pasajero
        {
            
$retorno false;
            
            
$documento $pasajero->getAtributo('mDocumento');
            
$nombre $pasajero->getAtributo('mNombre');
            
$apellido $pasajero->getAtributo('mApellido');
            
            
$result mysql_db::sql_query("UPDATE `reservas` SET `asiento` = '$asiento', `fila` = '$fila', `documento` = '$documento', `nombre` = '$nombre', `apellido` = '$apellido'");
            if (
$result)
            {
                
$this->mAsiento $asiento;
                
$this->mFila $fila;
                
$this->mPasajero $pasajero;
                
                
$retorno true;
            }
            return 
$retorno;
        }
        
        public function 
borrarDB($id)
        {
            
$retorno false;
            
            
$result mysql_db::sql_query("DELETE FROM `reservas` WHERE id='"$id ."'");
            if (
$result)
            {
                
$retorno true;
            }
            return 
$retorno;
        }
        
        private function 
__comprobarDisponibilidad()
        {
            
$id $this->mNumero;
            
            
$result mysql_db::sql_query("select v.asientos as total, count(r.idvuelo) as reservas from vuelos v, reservas r WHERE r.idvuelo='$id' AND v.id='$id' GROUP by v.id");
            
$row mysql_db::sql_fetchrow($result);
            
            
$retorno false;
            if (
$row[reservas]<$row[total])
            {
                
$retorno true;
            }
            return 
$retorno;
        }
        
        public function 
__toString()
        {
            return 
"Nombre: <b>"$this->mPasajero->getAtributo('mNombre') . "</b> - Apellido: <b>" $this->mPasajero->getAtributo('mApellido') . "</b> - Documento: <b>"$this->mPasajero->getAtributo('mDocumento') ."</b> - Asiento: <b>" $this->mAsiento "</b> - Fila: <b>" $this->mFila "</b>" ;
        }
    }
?>
class.pasajero.php
Código PHP:
<?php
    
final class Pasajero {
        private 
$mDocumento;
        private 
$mNombre;
        private 
$mApellido;
        
        public function 
getAtributo($atributo)
        {
            return 
$this->$atributo;
        }
        
        public function 
__construct($documento$nombre$apellido)
        {
            
$this->mDocumento $documento;
            
$this->mNombre $nombre;
            
$this->mApellido $apellido;
        }
    }
?>
  #2 (permalink)  
Antiguo 23/11/2008, 20:58
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Proyecto para clase

Primero, podrías haber resumido tu exposición

Segundo, cual es la duda concreta?

PD: La verdad que soy muy alérgico a las preguntas sobre trabajos de estudios.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #3 (permalink)  
Antiguo 24/11/2008, 02:59
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
De acuerdo Respuesta: Proyecto para clase

Hola...
Estoy comenzando en todo esto del POO.
Respecto a esto que expones tengo algunas dudas.

- Los metodos __construct, __toString, son metodos reservados por el PHP. ahora bien. Si a algunos de los metodos creados por ti, le agregas __ me da la sesación que sean metodos de PHP. Ya se que le podemos poner cualquier nombre y seguro que funcionaría pero es una manera de diferenciar lo que es de PHP o lo que es de usuario.

- Supongo que tienes una clase mysql, en donde allí cargas los parametros y estableces la conexion.
En todas las clases haces directamente referencia a: mysql_db::sql_query, pero no veo donde las inicializas, Realizas la conexion o mejor dicho si dentro de estas clase debería de llamar a la clase mysql.

- Porque todas tus clases son FINAL. Que sentido tiene esto.

Saludos,
__________________
LCervantes
--------------------------------------------
www.nerrots.es
  #4 (permalink)  
Antiguo 24/11/2008, 04:51
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Proyecto para clase

Cita:
- Los metodos __construct, __toString, son metodos reservados por el PHP. ahora bien. Si a algunos de los metodos creados por ti, le agregas __ me da la sesación que sean metodos de PHP. Ya se que le podemos poner cualquier nombre y seguro que funcionaría pero es una manera de diferenciar lo que es de PHP o lo que es de usuario.
Tu observación es correcta, según el estándar de PHP definido por Zend solo debería llevar una "_" los métodos y atributos de tipo privado.

Cita:
- Supongo que tienes una clase mysql, en donde allí cargas los parametros y estableces la conexion.
En todas las clases haces directamente referencia a: mysql_db::sql_query, pero no veo donde las inicializas, Realizas la conexion o mejor dicho si dentro de estas clase debería de llamar a la clase mysql.
Debe estar haciendo todo dentro del método estático, crea la instancia, se conecta y luego retorna los datos. De todas formas, considero que abusar de esta práctica solo trae dificultades para trabajar con todo el alcance de un objeto común y corriente.

Cita:
- Porque todas tus clases son FINAL. Que sentido tiene esto.
Según la sintaxis, esas clases no podrían ser heredadas, habría que ver el sentido del diseño y el contexto para hacer esto.

PD: estimados todos, traten de seguir los estándares de codificación de Zend, no inventen los propios.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 24/11/2008, 05:02
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
Respuesta: Proyecto para clase

Hola Enrique.
Gracias por tus comentarios.
Lo de los estandares lo considero importante. Asi todos hablamos o leemos el mismo idioma(lenguaje).
Del resto me ha quedado claro.
Gracias.
Saludos,
__________________
LCervantes
--------------------------------------------
www.nerrots.es
  #6 (permalink)  
Antiguo 24/11/2008, 06:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 33
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Proyecto para clase

Bueno gracias por la respuesta, mi duda concreta es, que estaria mal de lo que hize.
El otro dia me dijeron que le pusiera __ComprobarDisponibilidad(), no me acuerdo porque fue que lo hize.
Dicen que lo deje, por ComprobarDisponibilidad() sin los __ ?

Cita:
Debe estar haciendo todo dentro del método estático, crea la instancia, se conecta y luego retorna los datos. De todas formas, considero que abusar de esta práctica solo trae dificultades para trabajar con todo el alcance de un objeto común y corriente.
Que me recomendarias hacer? :/

Que cambiarian ustedes de la clase?
  #7 (permalink)  
Antiguo 24/11/2008, 06:53
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
Mensaje Respuesta: Proyecto para clase

Hola
Yo creo que tendrías que cambiar algunas cosas.
- Por un lado agregar una propiedad que sea conexion SQL y en el constructor agregarla para que tengas acceso a la clase SQL. Efectivamente agregar el include al inicio de la clase para que puedas acceder a la clase SQL.

- Quitar los __ a los metodos personales y dejar solo el __ al construct y al __toString

- Todo esto mismo en el resto de las clases.

- Y lo de final que le agregas a las clases pensaría un poco en lo que dice enriqueplace
Cita:
Según la sintaxis, esas clases no podrían ser heredadas, habría que ver el sentido del diseño y el contexto para hacer esto.
Es decir no las podrás heredar...

OJO: Con esto no quiero decir que sea la manera mas correcta. Pero es como yo lo haría.. Os parece bien... Tambien acepto comentarios...
Por otro lado me he limitado a cambiar directamente el codigo, y no a probarlo.

Código PHP:
<?php
   
include ('SQL.class.php');
    final class 
Vuelo {
        private 
$unaColReservas;
        private 
$mNumero;
        private 
$mFecha;
        private 
$mHora;
        private 
$mAsientos;
        private 
$mDestino;

        private 
$MYSQL;
        
        public function 
getAtributo($atributo)
        {
            return 
$this->$atributo;
        }
        
        public function 
__construct($numero$fecha$hora$asientos$destino)
        {
            
$this->mNumero $numero;
            
$this->mFecha $fecha;
            
$this->mHora $hora;
            
$this->mAsientos $asientos;
            
$this->mDestino $destino;
          
            
$this->MYSQL = new MYSQL()

            if (
$this->tieneReservas())
                
$result $this->MYSQL->sql_query("select * from reservas WHERE idvuelo='"$this->mNumero "' ORDER by apellido ASC");
                while (
$row $this->MYSQL ->sql_fetchrow($result))
                {
                    
$pasajero = new Pasajero($row[documento], $row[nombre], $row[apellido]);
                    
$reserva = new Reserva($row[idvuelo], $row[asiento], $row[fila], $pasajero);
                    
$this->unaColReservas[] = $reserva;
                }
        }
        
        public function 
agregarDB()
        {
            
$retorno false;
            
            
$result $this->MYSQL->sql_query("INSERT INTO `vuelos` (`id`, `fecha`,`hora`,`asientos`,`destino`) VALUES ('"$this->mNumero "', '"$this->mFecha "', '" $this->mHora "', '"$this->mAsientos "', '"$this->mDestino "');");
            if (
$result)
            {
                
$retorno true;
            }
            
            return 
$retorno;
        }
        
        public function 
borrarDB()
        {
            
$retornofalse;
            if (!
$this->tieneReservas())
            {
                
$result $this->MYSQL ->sql_query("DELETE FROM `vuelos` WHERE id='"$this->mNumero "'");
                if (
$result)
                {
                    
$retorno true;
                }
            }
            else
            {
                die(
"Este vuelo no puede ser borrado porque tiene reservas hechas");
            }
            return 
$retorno;
        }
        
        public function 
modificarDB($fecha$hora$destino)
        {
            
$retorno false;
            
$result $this->MYSQL ->sql_query("UPDATE `vuelos` SET `fecha` = '$fecha', `hora` = ' $hora', `destino` = '$destino' WHERE id='"$this->mNumero "'");
            if (
$result)
            {
                
$this->mFecha $fecha;
                
$this->mHora $hora;
                
$this->mDestino $destino;
                
                
$retorno true;
            }
            return 
$retorno;
        }
        
        public function 
tieneReservas()
        {
            
$result $this->MYSQL->sql_query("select * from reservas WHERE idvuelo='"$this->mNumero "'");
            
$retorno false;
            if (
$this->MYSQL ->sql_numrows($result))
                
$retorno true;
                
            return 
$retorno;
        }
        
        public function 
__toString()
        {
            return 
"Vuelo n. <b>" $this->mNumero "</b> - Fecha: <b>" $this->mFecha "</b> - Hora: <b>" $this->mHora "</b> - Destino: <b>" $this->mDestino "</b>";
        }
    }
?>
Saludos,
__________________
LCervantes
--------------------------------------------
www.nerrots.es
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:53.