Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 违反坚实的原则_Oop_Class_Solid Principles_Ooad - Fatal编程技术网

Oop 违反坚实的原则

Oop 违反坚实的原则,oop,class,solid-principles,ooad,Oop,Class,Solid Principles,Ooad,假设我们有一个类结构,其中代码分为两部分,比如说计算机科学和商业,现在这也进一步分为国家,比如印度(cs或MBA)和美国(cs或MBA)。 现在让我们考虑一个场景,我创建了像之类的类。 1) 教育班(家长班) 2) MBA课程扩展了教育课程 3) 理学士(cs)课程扩展了教育课程 现在在国家方面我也上了课 4) 印度_BS类扩展BS(cs)类 5) 印度大学MBA班扩大MBA班 6) US_BS类扩展了BS(cs)类 7) 美国工商管理硕士班扩大工商管理硕士班 现在让我们假设我编写的代码中,国家

假设我们有一个类结构,其中代码分为两部分,比如说计算机科学和商业,现在这也进一步分为国家,比如印度(cs或MBA)和美国(cs或MBA)。 现在让我们考虑一个场景,我创建了像

之类的类。 1) 教育班(家长班)

2) MBA课程扩展了教育课程

3) 理学士(cs)课程扩展了教育课程

现在在国家方面我也上了课

4) 印度_BS类扩展BS(cs)类

5) 印度大学MBA班扩大MBA班

6) US_BS类扩展了BS(cs)类

7) 美国工商管理硕士班扩大工商管理硕士班

现在让我们假设我编写的代码中,国家是在等级最低的类方法中设置的(即国家类INDIA_-BS、INDIA_-MBA、us_-BS、us_-MBA)
但逻辑是相似的。我传递国家名称,它就被设置好了

所以我的问题是
1) 将公共逻辑放在父类中(如果我这样做的话)并从层次结构中最低的子类调用该方法是否明智

2) 如果这是错误的,那么它违反的OOPS原则是什么

3) 它是否也违反了坚实的原则?如果是,那怎么办

4) 如果我将公共代码放在父类中,是否会降低子类的一致性

请尽可能详细说明。 谢谢你的类图:

我看到x个违规行为:

  • 重组合轻继承
  • 程序到接口,而不是实现
  • 软件实体应为扩展而开放,但为修改而关闭
  • 所以,我建议您使用抽象工厂模式。 代码:

    并且,您的类图如下所示:


    你听说过类图吗?是的,但我如何用Soy表示你可以将图像添加到Soy中你可以将其作为图像添加,并将其嵌入到帖子中
        class Test
        {
            static void Main(string[] args)
            {
                IEducationFactory india = new IndianEducation();
                IEducationFactory newYork = new USEducation();
    
                IDiplom d1 = india.Create_BSC();
                IDiplom d2 = newYork.Create_MBA();
            }
        }
    
        public interface IDiplom
        {
        }
    
        public interface IEducationFactory
        {
            IDiplom Create_MBA();
            IDiplom Create_BSC();
        }
    
        public class IndianEducation : IEducationFactory
        {
            public IDiplom Create_MBA()
            {
                throw new NotImplementedException();
            }
    
            public IDiplom Create_BSC()
            {
                throw new NotImplementedException();
            }
        }
    
        public class USEducation : IEducationFactory
        {
            public IDiplom Create_MBA()
            {
                throw new NotImplementedException();
            }
    
            public IDiplom Create_BSC()
            {
                throw new NotImplementedException();
            }
        }