1
C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Mapeo de memoria en Java Run Time Stack y Heap posiciones referencias contenidos
« en: 28 de Octubre 2016, 19:05 »
Salu2 a todos!
Tengo la esperanza de que alguien pueda ayudarme:
Nos pidieron programar un ejercicio muy sencillo para venta de productos y calculo de su costo total (al final dejo los códigos).
El problema ahora es que se nos pide integrar una simulación de mapeo de memoria con matrices, pero no tengo idea de como hacerlo, este es el enunciado por si alguien puede guiarme un poco, de antemano gracias!
Clase Main:
Clase Client:
Clase Product:
Clase BookProduct:
Clase ElectronicProduct:
Clase Bill:
Enum Taxes:
Tengo la esperanza de que alguien pueda ayudarme:
Nos pidieron programar un ejercicio muy sencillo para venta de productos y calculo de su costo total (al final dejo los códigos).
El problema ahora es que se nos pide integrar una simulación de mapeo de memoria con matrices, pero no tengo idea de como hacerlo, este es el enunciado por si alguien puede guiarme un poco, de antemano gracias!
Citar
Deben programar una representación del modelo de la memoria de Java para la ejecución del código programado. La representación debe ser implementada con dos matrices de String, una que represente el “Runtime Stack” y otra que represente el “Heap”. En la clase de la matriz deberán tener un método para agregar una fila a la matriz y otra para eliminar una serie de filas, desde el final al inicio hasta encontrar una fila null(representa la eliminación de un método o de un objeto).
También deberá tener un método para imprimir la matriz.
Deberán simular la ejecución del programa instrucción por instrucción, lo que quiere decir que para cada instrucción ejecutada deberán ir agregando a las matrices los valores de las instrucciones ejecutadas respectivamente: en una columna las
direcciones de memoria, en otra el valor que corresponde y en otra el nombre de la variable.
Cuando se termina de agregar un un objeto o un método a la matriz deberá agregar una fila null la separación de losmismos.
Sí se encuentra en un método que llama a varios métodos, para estos deberá guardar cálculos intermedios cuando uno de más ya han terminado y queda pendiente uno o más de los métodos.
En el caso de las variables String deben agregar sólo la fila que lo representa y no su espacio en heap ni el de su vector.
No deben realizar el mapeo de los métodos constructores ni de métodos propios de bibliotecas de Java.
Deberán utilizar direcciones ficticias para los segmentos de memoria (similar al formato de mapeo visto en los ejercicios de clase).
Deberán imprimir el contenido de las matrices que representan el “Runtime Stack” y “Heap” en los siguientes tres puntos:
• Se ha llamado al método getBillText del main para el primer objeto bill, dentro del cual se encuentra en el punto de llamar al método calculateCustomsTax, dentro del cual se calculateCustomsTax de Pruducto y en este método ya realizó el cálculo lo retornó pero aún no ha salido de la pila.
• Se ha llamado al método getBillText del main para el segundo objeto bill, dentro del cual se encuentra en el punto de llamar al método calculateTotalBil y en este método ya realizó el cálculo lo retornó pero aún no ha salido de la pila.
• Al final de la ejecución como si no hubieran borrado métodos u objetos. Para esto tendrá que comentar las eliminaciones para los dos puntos anteriores.
Clase Main:
Código: [Seleccionar]
public class Main {
public static void main(String[] args) {
Client client = new Client("101110111", "Light", "Yagami");
Product product = new BookProduct("D. Note", 10000.0, 0.5);
Bill bill = new Bill(client, product, 3);
String stringBill = bill.getBillText();
System.out.println(stringBill);
client = new Client("202220222", "Albert", "Einstein");
product = new ElectronicProduct("TV plasma", 600000.0, 5);
bill = new Bill(client, product, 1);
stringBill = bill.getBillText();
System.out.println("\n\n-------------------\n\n");
System.out.println(stringBill);
}
}
Clase Client:
Código: [Seleccionar]
public class Client {
private String identityCard;
private String name;
private String lastName;
public Client(String identityCard, String name, String lastName) {
this.identityCard = identityCard;
this.name = name;
this.lastName = lastName;
}
public String getIdentityCard() {
return identityCard;
}
public void setIdentityCard(String identityCard) {
this.identityCard = identityCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String toText() {
return "Cliente : " + identityCard + ", " + name + " " + lastName;
}
}
Clase Product:
Código: [Seleccionar]
public abstract class Product {
private String description;
private double price;
private double weight;
private final double customsTax;
public Product(String name, double price, double weight, double customsTax) {
this.description = name;
this.price = price;
this.weight = weight;
this.customsTax = customsTax;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getCustomsTax() {
return customsTax;
}
public double calculateCustomsTax() {
return (customsTax * price);
}
public String toText() {
return "Descripción: " + description + "\nPeso: " + weight + " kg\nImpuesto: " + customsTax + "\nPrecio: " + price;
}
}
Clase BookProduct:
Código: [Seleccionar]
public class BookProduct extends Product {
public BookProduct(String name, double price, double weight) {
super(name, price, weight, Taxes.BOOK_TAX.getTax());
}
@Override
public String toText() {
return "Producto: Libro\n" + super.toText();
}
}
Clase ElectronicProduct:
Código: [Seleccionar]
public class ElectronicProduct extends Product {
public ElectronicProduct(String name, double price, double weight) {
super(name, price, weight, Taxes.ELECTRONIC_TAX.getTax());
}
@Override
public String toText() {
return "Producto: Electrónico\n" + super.toText();
}
}
Clase Bill:
Código: [Seleccionar]
public class Bill {
private Client client;
private Product product;
private int quantity;
public Bill(Client client, Product product, int quantity) {
this.client = client;
this.product = product;
this.quantity = quantity;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public double calculateCustomsTax() {
return (product.calculateCustomsTax() * quantity);
}
public double calculateTransportCost() {
return product.getWeight() * quantity * Taxes.TRANSPORT_COST.getTax();
}
public double calculateTotalBill() {
return product.getPrice() + calculateCustomsTax() + calculateTransportCost();
}
public String getBillText() {
return client.toText() + "\n" + product.toText() + "\ncantidad: "
+ quantity + "\nImpuestos de aduanta: " + calculateCustomsTax()
+ "\nCosto de transporte: " + calculateTransportCost()
+ "\nTotal: " + calculateTotalBill();
}
}
Enum Taxes:
Código: [Seleccionar]
public enum Taxes {
BOOK_TAX(0.01), ELECTRONIC_TAX(0.25), TRANSPORT_COST(1000);
private final double TAX;
Taxes(double tax) {
this.TAX = tax;
}
public double getTax() {
return TAX;
}
}