Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Integrantes:
Edwin Aarón Garcia Pulido – 20161020051
Andres Felipe Rentería Velandia – 20161020058
Jhon Sebastian Pulido Peña – 20161020020
Asignatura:
Modelos de Programación I
Tema:
Patrón Plantilla
Ciudad:
Bogotá D.C
Año: 15/10/2017
Planteamiento del Problema
El usuario escoge el transporte que mejor le parezca (Ya sea por comodidad,
efectividad o rapidez), y hace el mismo procedimiento sin importar cuál sea el
transporte que escogió (Estos son: Transmilenio, SITP y Transporte Municipal).
El objetivo del programa es hacer todo el procedimiento correspondiente, sin importar
cuál sea el transporte escogido y mostrar cual fue el transporte que escogió el usuario.
¿Cómo se puede resolver esto mediante el Patrón Plantilla?
Solución
Diagrama UML:
Clases:
PruebaPlantilla (Main):
package plantilla;
import entrada_salida.*;
if (opcion < 2) {
salida.writeText("¿Cuánto saldo tiene su tarjeta
TuLlave?");
saldo = lector.readNumber();
} else if (opcion == 2) {
salida.writeText("¿En qué asiento desea sentarse?");
salida.writeText("Escriba la fila (En números)");
fila = lector.readNumber();
salida.writeText("Escriba el asiento (En números)");
asiento = lector.readNumber();
}
switch (opcion) {
case 0:
transporte = new Transmilenio(new TarjetaTuLlave(saldo),
salida, origen, destino);
break;
case 1:
transporte = new SITP(new TarjetaTuLlave(saldo), salida,
origen, destino);
break;
case 2:
transporte = new TransporteMunicipal(salida, origen,
destino, fila, asiento);
break;
default:
salida.writeText("La opción escogida es inválida");
break;
}
try {
transporte.viajar();
transporte.salida.writeText("\n\nEl transporte usado fue:
" + tiposTransporte[opcion]);
} catch (NullPointerException e) {
// TODO: handle exception
}
}
}
PlantillaTransporte (Abstracta):
package plantilla;
import entrada_salida.Salida;
SITP:
package plantilla;
import entrada_salida.Salida;
@Override
protected void pagarPasaje() {
tarjeta.saldo = tarjeta.saldo - tarifa;
salida.writeText("El saldo restante es de: " +tarjeta.saldo);
}
@Override
protected void entrarASistema() {
salida.writeText("Estás en la parada " + origen);
}
@Override
protected void bajarse() {
salida.writeText("Te bajas en la parada " + destino);
}
}
Transmilenio:
package plantilla;
import entrada_salida.Salida;
@Override
protected void pagarPasaje() {
tarjeta.saldo = tarjeta.saldo - tarifa;
salida.writeText("El saldo restante es de: " + tarjeta.saldo);
}
@Override
protected void entrarASistema() {
salida.writeText("Estás en la estación " + origen);
}
@Override
protected void bajarse() {
salida.writeText("Sales de la estación " + destino);
}
package plantilla;
import java.awt.Point;
import entrada_salida.Salida;
@Override
protected void pagarPasaje() {
salida.writeText("El pasaje costó " + tarifa);
}
@Override
protected void entrarASistema() {
salida.writeText("Usted está en " + origen);
salida.writeText("Su asiento es:\t" + (int) puesto.getX() + " -
" + (int) puesto.getY());
}
@Override
protected void bajarse() {
salida.writeText("Bienvenido a " + destino);
}
TarjetaTuLLave:
package plantilla;
Entrada (Abstracta):
//Clase Abstracta de la Entrada de datos
package entrada_salida;
Salida (Abstracta):
package entrada_salida;
EConsola:
//Clase para lectura desde la consola
package entrada_salida;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@Override
public String readText() {
String text="";
try {
text = lector.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return text;
}
@Override
public int readNumber() {
int number=-1;
try {
number=Integer.parseInt(lector.readLine());
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
@Override
public double readDouble() {
double number=-1;
try {
number=Double.parseDouble(lector.readLine());
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
@Override
public float readFloat() {
float number=-1;
try {
number=Float.parseFloat(lector.readLine());
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
EArchivo:
package entrada_salida;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
@Override
public void open() {
try {
file = new DataInputStream(new FileInputStream(ruta));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public String readText() {
String text = null;
try {
text = file.readUTF();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return text;
}
@Override
public int readNumber() {
int number = -1;
try {
number = file.readInt();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
@Override
public double readDouble() {
double number = -1;
try {
number = file.readDouble();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
@Override
public float readFloat() {
float number = -1;
try {
number = file.readFloat();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return number;
}
}
SConsola:
package entrada_salida;
@Override
public void close() {
}
@Override
public void writeText(String text, boolean linea) {
if (linea) {
System.out.println(text);
} else {
System.out.print(text);
}
}
@Override
public void writeDouble(double number) {
System.out.println(number);
}
@Override
public void writeFloat(float number) {
System.out.println(number);
}
@Override
public void writeNumber(int number) {
System.out.println(number);
}
@Override
public void writeDouble(double number, boolean linea) {
if (linea) {
System.out.println(number);
} else {
System.out.print(number);
}
}
@Override
public void writeFloat(float number, boolean linea) {
if (linea) {
System.out.println(number);
} else {
System.out.print(number);
}
}
@Override
public void writeNumber(int number, boolean linea) {
if (linea) {
System.out.println(number);
} else {
System.out.print(number);
}
}
@Override
public void writeText(String text) {
System.out.println(text);
}
SArchivo:
package entrada_salida;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
@Override
public void close() {
try {
file.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void writeText(String text, boolean linea) {
}
@Override
public void writeDouble(double number, boolean linea) {
}
@Override
public void writeFloat(float number, boolean linea) {
}
@Override
public void writeNumber(int number, boolean linea) {
}
@Override
public void writeText(String text) {
try {
file.writeUTF(text);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void writeDouble(double number) {
try {
file.writeDouble(number);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void writeFloat(float number) {
try {
file.writeFloat(number);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void writeNumber(int number) {
try {
file.writeInt(number);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}