抽象化
Why?
陸軍、空軍、海軍のK戦闘ゲームを開発中の開発者A氏.我々は先の継承から、軍の人々が攻撃を行うことを学んだので、攻撃という親の等級の方法を継承し、誇張処理しなければならない.しかし、A氏は継承を忘れ、クラスのメソッド名を任意にatt、attn、attaに指定した.さらに、A氏は数ヵ月後、自由を探すドビーとなり、他の開発者B氏が入社した.
Aのコードを見て、Bさんは心が乱れた.何をこんなことにしたの?方法の名前はいったい何を意味しますか?未知のコードを見ると、Bさんはメンテナンスやバイパス機能に深刻な悩みを抱えます.
開発者としての仕事は協力することです.私は一人で番組を作ってほしいのですが、ビルを一人で掘って建てるような無謀な感じがします.一人でやるときは毒性は必要ありません.私の目にはっきり見えて、私の頭の中でよく回ればいいです.しかし、多くの人と一緒にやるなら、ルールが必要です.すなわち,誰が見てもコードを記述し,読みやすく(多形性),メンテナンス(継承性)しなければならない.
<Overrideと問題>
抽象的な理解
企画書を書くときを考えます.部長になって「自由に書こうよ~」と言って、本当に自由に書いた新入社員Aさん、思考案内図、そしてボノボノの背景は、深刻な混種を作り出した.報告書を受け取った部長の顔がひどくなった.うん.本当に自由に書いてあるんですよね?再び指図されたA氏は、部長が何を望んでいるのか気になる.
しかし、ここに企画書の様式があるとしたらどうなるのでしょうか.具体的なガイドラインがあるので、A氏の立場でも記入しやすく、部長の立場でも内容が適切かどうかをチェックできるので一石二鳥.
抽象化は指導原則である.表自体は効力がありませんが、記入内容は有効になります.表にデータ値を書いて配布しない場合.抽象画もそうです.自分で生成した内容はなく、表だけでいいです.
<継承処理時にoverrideを強制する>
<抽象メソッドの作成>
// 선언만 가능하고, 구현부를 위한 블록이 존재하지 않는다.
public abstract void sayHello();
1つ以上の// 추상 클래스 정의
public abstract class Hello {
// 선언만 가능하고, 구현부를 위한 블록이 존재하지 않는다.
public abstract void sayHello();
}
public abstract class Unit {
private String name;
public Unit(String name) {
super();
this.name = name;
}
/** getter, setter */
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 자식들이 재정의할 메서드를 추상으로 명시
public abstract void attack();
public abstract void move();
}
/**
* 추상 클래스를 상속받으면 자식은 부모의 모든 추상 메서드를
* 재정의 해야 한다.
*/
public class Army extends Unit {
public Army(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
System.out.println(this.getName() + " >> 육상공격");
}
@Override
public void move() {
System.out.println(this.getName() + " >> 육상이동");
}
}
public class Navy extends Unit {
public Navy(String name) {
super(name);
}
@Override
public void attack() {
System.out.println(this.getName() + " >> 해상공격");
}
@Override
public void move() {
System.out.println(this.getName() + " >> 해상이동");
}
}
public class AirForce extends Unit {
public AirForce(String name) {
super(name);
}
@Override
public void attack() {
System.out.println(this.getName() + " >> 공중공격");
}
@Override
public void move() {
System.out.println(this.getName() + " >> 공중이동");
}
}
public class Main01 {
public static void main(String[] args) {
Army army = new Army("육군");
Navy navy = new Navy("해군");
AirForce air = new AirForce("공군");
// 다형성이란, 객체의 이름이 서로 다르더라도 -
// 객체의 메서드를 호출할 때 고민하지 않기 위한 기법이다.
// 추상화는 다형성을 강제하는 것으로 -
// 객체를 사용하는 개발자의 편의를 위한 클래스 작성 규칙이다.
army.move();
army.attack();
navy.move();
navy.attack();
air.move();
air.attack();
}
}
이 포스트는 itpaper.co.kr에서 제공되는 강의자료를 바탕으로 작성되었습니다.
Reference
この問題について(抽象化), 我々は、より多くの情報をここで見つけました https://velog.io/@hari6180/추상화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol