¿Cómo crear una clase cuando sus atributos son dinámicos y variables en Java, C++ o cualquier lenguaje orientado a objetos?

¿Cómo crear una clase cuando sus atributos son dinámicos y variables en Java, C++ o cualquier lenguaje orientado a objetos?


Ok, en Lenguaje Orientado a Objetos (OOL), al crear una Clase, a menudo conocemos de antemano todos sus atributos. Por ejemplo, la clase de artículo debe tener atributos fijos (color, modelo, marca, precio). Así que solo:


   public Class Item{
private String color;
private String model;
//etc more attribute here
//& set & get method for all attributes
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}

Pero, ¿y si todos los atributos son dinámicos? Por ejemplo, en 1 empresa, los atributos de sus artículos pueden ser color, marca, pero en otra empresa, no tienen atributos de color y marca, pero tienen ancho, alto, tamaño...


¿Cómo crear una Clase que acepte atributos dinámicos en Java, C++ o en cualquier OOL?


Respuestas:



Realmente depende de cómo quieras usar esto. En muchos casos, podría modificar su clase para que contenga algún tipo de colección de crecimiento dinámico, como un std::map en C++ o un Map (o Dictionary ) en Java.


Esto le permite crear y agregar datos arbitrarios por instancia con una clave elegida en tiempo de ejecución.


Algunas respuestas de código


   public Class Item{
private String color;
private String model;
//etc more attribute here
//&
set &
get method for all attributes
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
Abstract Class Item {
// This class will never be instantiated, but it can hold
// things that are common to all Items, such as sale price.
private int price;
public int getPrice() { return price;
}
// etc. } Class VendorOneItem : Item {
// This class gets 'price' and 'getPrice' by default,
// since it inherits from Item
private String color;
private String model;
// etc. } Class VendorTwoItem : Item {
// This class also gets 'price' and 'getPrice'
private Double width;
private Double height;
// etc. }
{"key": value} {"Color": "blue"} {"Price": 9.99} {"Model": 1234-567-890} 
{"Price": 129.99} {"Height": 12.750} {"Width": 8.55} 
std::vector<*Item>
items;
items.push_back(new VendorOneItem());
items.push_back(new VendorTwoItem());
virtual public void ProcessItem()=0;
//This will throw compilation errors // if all derived classes don't define ProcessItem
items[0].ProcessItem();
items[1].ProcessItem();