学生が誤ってOOPを教えられているように思える理由

私が大学にいたとき、OOP(オブジェクト指向プログラミング)を理解するのは非常に困難でしたが、今では私たちは単に明確で正確なアナロジーを使用してOOPを教えられていないことを理解しています。 。



画像






OOPの古典的なアナロジーを思い出してください。ここでは、「声」と「食事」のメソッドを持つペットクラスがあり、そこから猫と犬を継承します。



しかし、その後、光が来て、話をしない水族館の魚をもたらし、次にヴァシャが来て、彼の愛するサボテンをもたらします。



すでに混乱していますが、Vovochkaは次のように尋ねています。「この動物園の静的メソッド、インターフェイス、抽象クラスはどこにあり、クラスオブジェクトはクラス自体とどう違うのですか?」 もちろん、説明は可能ですが、難しいです。 理解するのはさらに難しいです



または、もう1つの古典的な例は、正方形を継承したい長方形です(論理的には、正方形は長方形の特殊なケースです)が、長方形には長さと幅があり、正方形には片側しかありません。 ここでも何か混乱しています。



では、OOPをよりよく説明する方法について考えてみましょう。



オブジェクト指向プログラミングは、実世界のオブジェクトの記述(より正確には、実世界の記述だけでなく)ではなく、あらゆる種類の工学局、建築設計者、設備設計者などの設計手法(あらゆる種類のコンピューターの外観)から登場しました。



画像



したがって、この会社で航空機を製造する会社と設計局を想像してください(たとえば、ボーイング)。 軍用機、貨物、乗客のいくつかのモデルを注文しました。



最初に行うことは、すべてのモデルの一般的な描画を開始することです。 この図によれば、実際の航空機を作ることはまだ不可能ですが、一般的な実装の詳細がすでに含まれています。 これは抽象クラスです。



Javaコード
public abstract class  {  //     ;
        public abstract void ();
        public void () {
            //     
        }
        public abstract void ();
 }

      
      







, , , , ( , ), , , . .



Java
public interface  { //      
        long get();
        double get();
        long get();
        void ();
        void ();
        void ();
}

public abstract class  implements  {
    ...

      
      







, , , , (/)   .



Java
public abstract class  {  //     ;
        public abstract void (); //  
        public void () {
            //     
        }
        public abstract void (); //  
 }

      
      







, . . , , . , , . .



Java
public class  extends  {  
       public int get() {
              return 120;
        }
        public void () {
            __();
            _();
            ___();
            ():
        }
        ...
}
public class   extends  {  
       public int get() {
              return 5;
        }
        public void () {
            _();
            _();
            ():
        }
        ...
}

      
      







() . , , , . () .



Java
  = new ();

.set(0.99);

      
      







image



, , . . .



Java
.set(0.0);

      
      







2 , , (, ) , ( , ). .



Java
public class  extends  {  
       ...
        public void () {
            _();
            ___();
            ___();
            ():
        }
        ...
}
public class   extends  {  
        public void () {
            _();
            _();
            ():
        }
        ...
}

      
      







, , ( ), « - ». .



Java
public class  extends  {  
       private   = new 45()
        ...
}

      
      







, (, , ), . .



120 , - 130 ( ), , . , - 120 , 130 , , , . .



Java
public class 130 extends  {  
       @Override
        public int get() {
              return 130;
        }
        ...
}

      
      







?



, , . , . , - (, , ), - () .



, , , . . .



( ), , , , - (, , , ), , . — . — ..



!



P.S. (, Java SE)



All Articles