标签: object-oriented-analysis

OOP设计:抽象类设计与常规继承

为了好玩,我正在设计一个简单的系统来存储记录(黑胶唱片)数据和一些与记录有关的一般项目(袖子,记录清洁工等).

由于90%的数据将是黑胶唱片和其他10%的其他项目,我想把它们分成两类:记录和项目.请记住,尽管最后两者都是具有某些共同点的产品,如价格,数量等.

我怀疑是否应该创建一个抽象类,比如Item,以及两个扩展Item:Records和NonMusicalProducts的类.像这样的东西:

abstract class Item {

    static function getItemPrice($itemId, $type='record'){
        $result = 0;
        // query record table if type is record, otherwise query nonmusicalproduct table
        return $result;
    }

    abstract function getItemDetails();
}
Run Code Online (Sandbox Code Playgroud)

而记录:

class Record extends Item {
    static function getItemDetails($id) {
        // query DB and return record details
    }
}
Run Code Online (Sandbox Code Playgroud)

和NMProduct

class NMProduct extends Item {
    static function getItemDetails($id) {
        // query DB and return NMProduct details
    }
}
Run Code Online (Sandbox Code Playgroud)

将NMProduct和Record中的两个方法定义为静态可以吗?我并不总是从一个对象访问该方法.

另一个选项是只有一个Item类和一个可以从item继承的Record类,但是我已经到了一个看起来不正确的点,特别是在尝试获取细节时:

class Item {
   function getItemDetails($id, $type){
        if …
Run Code Online (Sandbox Code Playgroud)

oop design-patterns dry object-oriented-analysis

3
推荐指数
1
解决办法
189
查看次数

2
推荐指数
1
解决办法
1万
查看次数

如何在不使用IF条件的情况下执行此操作

我有一个定义一个方法的接口.此接口具有多个以不同方式实现该接口的类.

例如:

interface IJob {
  void DoSomething();
}

class SomeJob : IJob{
  public void DoSomething() {
    // Do something ...
  }
}

class AnotherJob : IJob {
  public void DoSomething() {
    // Do something ...
  }
}

...
Run Code Online (Sandbox Code Playgroud)

我的工厂类将有一堆这些IF语句

if (some condition)
{
   IJob job = new SomeJob (); 
else
{
   IJob job = new AnotherJob (); 
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免每次出现新情况时修改工厂类.这可以通过添加一个实现IJob的新类来完成吗?

编辑: [我想弄清楚Antiifcampaign的这些人正在尝试做什么]

谢谢你的时间...

c# oop object-oriented-analysis

2
推荐指数
1
解决办法
156
查看次数

面向对象设计:使用方法参数vs属性

在面向对象设计中,以下哪项更好?

使用以下方法发送参数:

obj.InsertRecord("raed","1987")
Run Code Online (Sandbox Code Playgroud)

或使用以下属性:

obj.name= "raed"
obj.year= "1987"
obj.InsertRecord() 
Run Code Online (Sandbox Code Playgroud)

c# object-oriented-analysis

2
推荐指数
1
解决办法
868
查看次数

在java中可以创建多少个嵌套的"新"对象?

class car{
    Salon s ;
}
class Salon{
     Radio musicsystem ;
}
class Radio{
    Button play ;
}
class Button{
     String s ;
}

void main(){
    car mustang = new car( new Salon( new Radio(new Button ("fight club song"))))
}
Run Code Online (Sandbox Code Playgroud)

我很容易想象有很多新的(新的(新的(新的......))).你有多深?我"直觉地"觉得编译器/ jvm /系统有太多级别的对象可能会很糟糕......

java对深度有限制吗?

java oop object object-oriented-analysis

2
推荐指数
1
解决办法
249
查看次数

数组作为类javascript中的数据成员

我是面向对象的 javascript 中的新手,并试图定义一个类,该类将数组作为数据成员。这个类的数据成员将另一个类的对象存储为数组。

这个例子会更清楚

function classA(id, objB_01)
{

    this.id = id;   // data member that store a simple value
    this.arrayname = objB_01  // How multiple instance of classB is stored in this array 


}

function classB( id, name, status)
{
     this.id = id;
     this.name = name;
     this.status = status 
}

objB_01 = new classB("01", "john", "single");
objB_02 = new classB("02", "smith" "single");
objB_03 = new classB("03", "nina", "married");
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我如何编写classA这样的单个实例来classA保存一个存储多个对象的数组classB

像这样的东西

objA = new classA("01",objB_01);
objA.arrayname …
Run Code Online (Sandbox Code Playgroud)

javascript jquery object-oriented-analysis

2
推荐指数
1
解决办法
3万
查看次数

Python - 使用基类方法更新子属性

我花了一天的时间试图找到这个问题的答案,但一无所获。

假设我有几个类,每个类都包含与其他类相同的方法。

class A:
    def __init__(self, attr1, attr2, color):
        self.__attr1 = attr1
        self.__attr2 = attr2
        self.__color = color

    def set_color(self, color):
        self.__color = color

class B:
    def __init__(name, attr3, attr4, color):
         self.__attr3 = attr3
         self.__attr4 = attr4
         self.__color = color

    def set_color(self, color):
        self.__color = color
Run Code Online (Sandbox Code Playgroud)

在此示例中,相同的方法被简化为只有一个相同的方法 set_color,以说明我正在尝试执行的操作。

有没有办法消除重复代码,也许使用如下抽象类?

class Parent:
    def set_color(self, color):
        self.__color = color

class A(Parent):
    def __init__(self, attr1, attr2, color):
        self.__attr1 = attr1
        self.__attr2 = attr2
        self.__color = color


class B(Parent):
    def __init__(name, attr3, attr4, color): …
Run Code Online (Sandbox Code Playgroud)

python inheritance abstract-class object-oriented-analysis

2
推荐指数
1
解决办法
1793
查看次数

如何在已经存在但不能在java中修改的类周围创建接口

假设我的代码中已经有两个类:

class SomeOrder {
  String getOrderId() { return orderId; }
}

class AnotherOrder {
  String getOrderId() { return orderId; }
}
Run Code Online (Sandbox Code Playgroud)

如何围绕这两个类创建一个接口:

interface Order {
    String getOrderId();
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我将修改代码,以便SomOrder implements OrderAnotherOrder implements Order,但这里的前提条件是,他们在我无法控制或编辑一个包属于(即它们来自外部的jar).

我的算法目前看起来像这样:

void sorter(List<SomeOrder> orders) {
    ... <custom sort logic> ...
    someOrder.getOrderId();
}

void sorter(List<AnotherOrder> orders) {
    ... <custom sort logic> ...
    someOrder.getOrderId();
}
Run Code Online (Sandbox Code Playgroud)

使用单一界面我可以写:

void sorter(List<Order> orders) {
        ... <custom sort logic> ...
        order.getOrderId();
}
Run Code Online (Sandbox Code Playgroud)

java oop class-design interface object-oriented-analysis

2
推荐指数
1
解决办法
112
查看次数

两个组合可以拥有同一个对象吗?

我正在尝试为在线拍卖系统制作类图,但遇到了这个问题。出价属于拍卖和买方(如果我错了,请纠正我)。那么我可以说 User 由 bid 组成,而 racing 由 Bid 组成,或者这违反了 UML 规则?我很困惑

oop uml composition object-oriented-analysis

2
推荐指数
1
解决办法
1193
查看次数

对象转换器的面向对象设计模式

我想知道对于我的场景应该采用什么最好的OOP 设计模式。

场景:

我有两个班级,A 班和 B 班。我想将 ClassA 转换为新的 ClassB,但是 ClassA 可能会更改其成员变量和方法。这意味着可能必须更新 ClassA 转换为 ClassB 的方式。

促进从 ClassA 到新 ClassB 的转换的最佳 OOP 设计是什么?

目标:

创建一个设计模式,允许轻松更改将 ClassA 转换为 ClassB 的方式。

例子:

A级

public class ClassA {
    private String actionName;

    // With some getters & setters
}
Run Code Online (Sandbox Code Playgroud)

B级

public class ClassB {
    private String action; // Note the subtle difference

    // With some getters & setters
}
Run Code Online (Sandbox Code Playgroud)

处理程序

public class Handler {
    ClassB classB = new ClassB();

    // Convert ClassB to …
Run Code Online (Sandbox Code Playgroud)

java oop design-patterns object object-oriented-analysis

2
推荐指数
1
解决办法
4592
查看次数