親を包装する抽象的な方法によって構造と行為が統一される.
注:Hadoopテクノロジーフォーラムで発表された
OOを行うと、構造統一が容易になり、これも理解しやすくなり、以下のようになります.
上記の設計では、構造は統一されており、外部にはParentが示されているが、動作は統一されていない.gdb印刷呼び出しスタックを使用すると、Parentの影が見えず、システムが膨大になると、新人にシステムを理解するのに抵抗が増加する.どうやってこの問題を解決しましたか.行動を統一することで、これを明確化することができます.メソッドは、Parentに非抽象メソッドを追加し、この新しく追加された非抽象メソッドによってhelloを呼び出すことで、呼び出しスタックにParentの姿が見え、呼び出しスタックに階層感が表示され、システムの理解に役立ちます.
上記の修正は、簡単に見ると、コードや呼び出し回数を増やす欠点のほかに、何のメリットもありませんが、ソフトウェア開発は実際にはエンジニアリング的な仕事であり、全体性や外部要因を考慮する必要があるなど、個人的には価値があると思います.特にUMLを設計する場合、タイミングチャートはより理性的に見えます.
OOを行うと、構造統一が容易になり、これも理解しやすくなり、以下のようになります.
- class Parent
-
- {
-
- public:
-
- virtual void hello() = 0;
-
- };
-
-
-
- class Child1: public Parent
-
- {
-
- private:
-
- virtual void hello() {
-
- printf("Child1
"); // , Parent
-
- }
-
- };
-
-
-
- class Child2: public Parent
-
- {
-
- private:
-
- virtual void hello() {
-
- printf("Child2
"); // , Parent
-
- }
-
- };
-
-
-
- int main() {
-
- Parent* p = new Child2;
-
- p->hello();
-
- return 0;
-
- }
上記の設計では、構造は統一されており、外部にはParentが示されているが、動作は統一されていない.gdb印刷呼び出しスタックを使用すると、Parentの影が見えず、システムが膨大になると、新人にシステムを理解するのに抵抗が増加する.どうやってこの問題を解決しましたか.行動を統一することで、これを明確化することができます.メソッドは、Parentに非抽象メソッドを追加し、この新しく追加された非抽象メソッドによってhelloを呼び出すことで、呼び出しスタックにParentの姿が見え、呼び出しスタックに階層感が表示され、システムの理解に役立ちます.
- class Parent
-
- {
-
- public:
-
- /* virtual */ void hello() {
-
- do_hello();
-
- }
-
-
-
- private:
-
- virtual void do_hello() = 0;
-
- };
-
-
-
- class Child1: public Parent
-
- {
-
- private:
-
- virtual void do_hello() {
-
- printf("Child1
"); // , Parent -> Child1
-
- }
-
- };
-
-
-
- class Child2: public Parent
-
- {
-
- private:
-
- virtual void do_hello() {
-
- printf("Child2
"); // , Parent -> Child2
-
- }
-
- };
-
-
-
- int main() {
-
- Parent* p = new Child2;
-
- p->hello();
-
- return 0;
-
- }
上記の修正は、簡単に見ると、コードや呼び出し回数を増やす欠点のほかに、何のメリットもありませんが、ソフトウェア開発は実際にはエンジニアリング的な仕事であり、全体性や外部要因を考慮する必要があるなど、個人的には価値があると思います.特にUMLを設計する場合、タイミングチャートはより理性的に見えます.