抽象化


Why?


陸軍、空軍、海軍のK戦闘ゲームを開発中の開発者A氏.我々は先の継承から、軍の人々が攻撃を行うことを学んだので、攻撃という親の等級の方法を継承し、誇張処理しなければならない.しかし、A氏は継承を忘れ、クラスのメソッド名を任意にatt、attn、attaに指定した.さらに、A氏は数ヵ月後、自由を探すドビーとなり、他の開発者B氏が入社した.
Aのコードを見て、Bさんは心が乱れた.何をこんなことにしたの?方法の名前はいったい何を意味しますか?未知のコードを見ると、Bさんはメンテナンスやバイパス機能に深刻な悩みを抱えます.
開発者としての仕事は協力することです.私は一人で番組を作ってほしいのですが、ビルを一人で掘って建てるような無謀な感じがします.一人でやるときは毒性は必要ありません.私の目にはっきり見えて、私の頭の中でよく回ればいいです.しかし、多くの人と一緒にやるなら、ルールが必要です.すなわち,誰が見てもコードを記述し,読みやすく(多形性),メンテナンス(継承性)しなければならない.
  • 継承性:オブジェクト間の共通機能を管理するための技法.(exQ&Aと資料室の掲示板機能を組み合わせて親として定義)編成されたコードを言及することで再利用し,プログラムのメンテナンスを容易にした.(共通に定義されているので、機能の再編成時に親を変更するだけです.)
  • 多形性(overlight,overload):異なる機能ですが、メソッドの名前はプログラム全体の一貫性を維持するために同じです.(unit攻撃からのnavy攻撃を再定義するように、メソッド名を入力するだけで複数のパラメータデータ型の異なるメソッドが作成されます)
  • <Overrideと問題>

  • 誤字を防止するために全く異なるメソッドとして定義されていますが、サブクラスで親のメソッドを再定義する場合は@Overrideを付けて防止することにしました.
  • ただし,@Overrideキーワードを使用しても親を再定義する方法がなければマルチフォームは実現しない.人なので中身を忘れてしまう可能性があります
  • 抽象的な理解


    企画書を書くときを考えます.部長になって「自由に書こうよ~」と言って、本当に自由に書いた新入社員Aさん、思考案内図、そしてボノボノの背景は、深刻な混種を作り出した.報告書を受け取った部長の顔がひどくなった.うん.本当に自由に書いてあるんですよね?再び指図されたA氏は、部長が何を望んでいるのか気になる.
    しかし、ここに企画書の様式があるとしたらどうなるのでしょうか.具体的なガイドラインがあるので、A氏の立場でも記入しやすく、部長の立場でも内容が適切かどうかをチェックできるので一石二鳥.
    抽象化は指導原則である.表自体は効力がありませんが、記入内容は有効になります.表にデータ値を書いて配布しない場合.抽象画もそうです.自分で生成した内容はなく、表だけでいいです.

    <継承処理時にoverrideを強制する>

  • 抽象化技術は、あるクラスを継承した場合に親の特定のメソッドを無条件に再定義することを強制する技術である.特定のメソッドを強制的に再定義することで、サブクラスの作成ウィザード、すなわちフォームとして機能します.
  • 抽象技術の役割は、Javaクラスを作成するための設計図をソースコード形式で与えることである.△建物を建てるときは設計図を描くが、設計図は建築法に従って作られ、政府を通じて作らなければならない.抽象化は建築法と見なすことができる.
  • <抽象メソッドの作成>

    // 선언만 가능하고, 구현부를 위한 블록이 존재하지 않는다.
    public abstract void sayHello();
    1つ以上の
  • 抽象メソッドを含むクラスは、「抽象クラス」として定義する必要があります.
  • // 추상 클래스 정의
    public abstract class Hello {
    
    	// 선언만 가능하고, 구현부를 위한 블록이 존재하지 않는다.
    	public abstract void sayHello();
    }
  • 抽象クラスはオブジェクトを生成できません.(テーブルにデータ値を書き終えて渡すように)継承して使用する必要があります.サブクラスのガイドライン.
  • 抽象クラスは、ジェネレータ、メンバー変数、一般的なメソッドなどを含むことができる.
  • は、汎用機能およびガイドラインを定義し、他のクラスに継承する.
  • <実習01>
    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에서 제공되는 강의자료를 바탕으로 작성되었습니다.