代码之家  ›  专栏  ›  技术社区  ›  Lenni

面向对象设计-如何将一个类嵌套到另一个类中

  •  0
  • Lenni  · 技术社区  · 6 年前

    我来自关系数据库的世界,我发现自己必须创建我的第一个面向对象的程序,尽管我在学习,我只是不能掌握如何做最基本的事情。

    我已经定义了 Product 阶级( int id String productName , double price …)及其方法和属性,以及 ProductFamily 阶级( String familyName String costCenter …)有自己的方法和属性。

    谢谢您!!

    3 回复  |  直到 6 年前
        1
  •  1
  •   Natha    6 年前

    必须将字段添加到Product类,ProductFamily类的对象。通过在产品类中添加方法getProductFamily(),可以返回特定产品的产品系列。

        2
  •  0
  •   NameVergessen    6 年前

    在Java中只能扩展一个类。你可以在很多课上这样做。如果您想用相同的函数名扩展多个类,我将使用接口。

        3
  •  0
  •   uneq95    6 年前

    可能是这样,假设 ProductFamily Product 课程:

    class ProductFamily{
    
        private List<Product> products;
    
        //add all other members and getters and setters
    }
    

    产品 特定的 产品系列 例如,您可以获取 从getter添加到它。可能还有另一种方法 产品系列 产品

     class ProductFamily{
    
        private List<Product> products;
    
        //add all other members and getters and setters
    
        public void addProduct(Product newProduct){
            this.products.add(newProduct);
        }
    }
    
        4
  •  0
  •   Walter Mitty    6 年前

    如果您来自关系数据库领域,那么您可能已经牢牢掌握了几个相关的概念,包括关系连接、数据规范化、逻辑数据独立性、自描述数据、ACID事务和并发控制。对于初学者来说,要真正掌握每一个概念的力量和简单性是很困难的,因为他们对所有概念都不太熟悉。信不信由你,对象建模专家发现,仅仅通过将这些概念与他们已经知道的东西进行比较,就不容易掌握其中的每一个概念。

    当您第一次开始学习对象建模时,也会发生类似的事情。三个相互关联的概念是继承、封装和多态性。如果没有对另外两个的把握,这些都没有多大意义。他们共同努力,建立一个既强大又简单的系统。

    抵制将对象模型视为关系模型的诱惑,只不过没有一些特性。这是对对象模型的过度简化。事实上,每一种造型模式都是造型艺术的巨大进步,大约在四五十年前。它们中的每一个都让人们更容易思考现有的系统或提出的系统,但还没有建立起来。

    但他们彼此不一样 两个都不是从另一个派生出来的。

    在关系建模中,与超类/子类最接近的类比不是在关系模型中,而是在扩展实体关系模型中。这里有一个概念叫做泛化/专门化。猫、狗、鸟或蛇是普通宠物的特长。这是一种IS-A关系。如果泛化/专门化对您来说在当前的情况下是有意义的,那么子类和继承将为您提供很好的服务。如果没有,那么最好不要尝试在这里使用子类。

    Schedule Join Multiple Tables . 对于那些人,有一个标签

    您需要决定Product和ProductFamily是否是继承有用的情况。同样,如果它是一个HAS-a关系,忘记子类和继承。如果这是一个IS-A关系,那么继承是一个简单解决方案的关键。为了在超类上执行有意义的操作,您要么必须将自己限制在对超类有意义的操作上,要么必须学习如何构建多态操作。这是一个很大的学习,但有很多价值的道路尽头。