学生が誤って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)

Source: https://habr.com/ru/post/J345658/


All Articles