U E D R , A S I H C RSS

Java Study2003/�번째과제/곽세환

ToyProblems 를 �바로

Board.java

~cpp 
import javax.swing.JOptionPane;

public class Board {
	private int array[][]; //�� 배열
	private int max_x;	   //�� 가로�기
	private int max_y;	   //�� 세로�기
	
	//�� �성
	public Board(int x, int y) {
		max_x = x;
		max_y = y;
		array = new int[max_y][max_x];
		for (int i = 0; i < max_y; i++)
			for (int j = 0; j < max_x; j++)
				array[i][j] = 0;
	}
	
	//발�국� 가� 채워졌니?
	public boolean IsStepFull() {
		for (int i = 0; i < max_y; i++)
			for (int j = 0; j < max_x; j++)
				if (array[i][j] == 0)
					return false;
		return true;
	}
	
	//주어진 위치가 벽�니?
	public boolean IsPostionWall(int x, int y) {
		if (x == -1 || x == max_x || y == -1 || y == max_y)
			return true;
		else
			return false;
		
	}
	
	//발�국� �는다
	public void PutStep(int x, int y) {
		array[y][x]++;
		
		//아래주�표시를 지우면 발�국� ��때마다 보여줌
		//ShowStep();
	}
	
	//발�국� 보여준다
	public void ShowStep() {
		String output = "";
		for (int i = 0; i < max_y; i++)
		{
			for (int j = 0; j < max_x; j++)
				output += array[i][j] + "    ";
			output += '\n';
		}
		JOptionPane.showMessageDialog(null, output);
	}
}

Roach.java

~cpp 
public class Roach {
	private int p_x; // 바퀴� 현재 x 위치
	private int p_y; // 바퀴� 현재 y 위치

	//바퀴� ��
	public void Move(Board bo, int x, int y) {
		p_x = x;
		p_y = y;
		bo.PutStep(p_x, p_y);		

		while (!bo.IsStepFull()) {
			int c_x; // 바퀴가 ��할 x 위치	
			int c_y; // 바퀴가 ��할 y 위치
			do
			{
				c_x = p_x; 
				c_y = p_y; 			 
				int dir = (int)(Math.random() * 8);
				switch (dir)
				{
					case 0: 
							c_y--; 
							break; 
					case 1: 
							c_x++; 
							c_y--; 
							break; 
					case 2: 
							c_x++; 
							break; 
					case 3: 
							c_x++; 
							c_y++; 
							break; 						
					case 4: 
							c_y++; 
							break; 
					case 5: 
							c_x--; 
							c_y++; 
							break; 						
					case 6: 
							c_x--; 
							break; 						
					case 7: 
							c_x--; 
							c_y--; 
							break; 
				}
			} while (!SeeNextPos(bo, c_x, c_y));
			p_x = c_x;
			p_y = c_y;
			bo.PutStep(p_x, p_y);
		}
	}
	
	//��할 �리를 살핀다
	//벽�면 false 벽� 아니면 true
	public boolean SeeNextPos(Board bo, int x, int y) {
		if (bo.IsPostionWall(x, y))
			return false;
		else
			return true;
	}
}

Human.java

~cpp 
import javax.swing.JOptionPane;

public class Human {
	// 바퀴를 놓는다
	public void PutRoach (Roach ro, Board bo, int x, int y) {
		ro.Move(bo, x, y);
	}
	
	// KillRoach를 어떻게 사용할까???
	public void KillRoach (Roach ro) {
		//�명� 보호합시다 ^^
	}
	
	// �� 본다
	public void SeeBoard (Board bo) {
		bo.ShowStep();
	}
	
	public static void main(String[] args) {
		int start_x, start_y; // 바퀴� 시작위치 받� 변수
		int board_x, board_y; // �� �기 받� 변수
		Human sehwan = new Human();
		Roach roach = new Roach();
		
		board_x = Integer.parseInt(JOptionPane.showInputDialog(null, "격�� 가로�기"));
		board_y = Integer.parseInt(JOptionPane.showInputDialog(null, "격�� 세로�기"));
		start_x = Integer.parseInt(JOptionPane.showInputDialog(null, "바퀴� 가로위치"));
		start_y = Integer.parseInt(JOptionPane.showInputDialog(null, "바퀴� 세로위치"));
		// 시작위치 맨왼쪽위가 (0,0)
								
		Board board = new Board(board_x, board_y);
		
		sehwan.PutRoach(roach, board, start_x, start_y); // 바퀴를 놓는다
		sehwan.SeeBoard(board); 						 // 다 �면 �� 본다

	}
}

내용요약

1.�체지향 개�과 �바

가.�체지향개�
�태:�체가 가지고 있는 �성 �는 특성
행�:�체가 가지고 있는 기능 �는 할 수 있는 행�
예) ��차 - �체
색,바퀴,핸들,배기량,��,기어 - �태
달린다,기어를 바꾼다,ì†�ë�„를 높ì�´ê±°ë‚˜ ë‚®ì˜ë‹¤, ê²½ì �ì�„ 울린다 - í–‰ë�™

실세계 �체 -> 소프트웨어 �체
�태 -> 변수
행� -> 메소드(함수)

�체지향방법� 특징
캡�화(Encapsulation):
변수와 메소드를 하나� 소프트웨어 묶�으로 만든다.
캡�화는 모듈성(modularity)과 정보�닉(information hiding)� 제공한다.
모듈성� ��� �체를 위한 소스코드가 서로 무관하게 유지� 수 있다는 것�다.
정보�닉� �체가 가지는 정보� 접근 권한� 주어 다른 �체로 부터� 접근� 제한할 수 있다.
메시지(Message):
�체와 �체가 통신� 하는� �용�다.
메시지를 받� �체, 수행� 요청한 메소드� �름, 메소드� �해 필요한 매개변수 등 세가지 구성요소를 가진다.
�래스(Class):(벽�틀)
특정 종류� �체들� 대해 �반�으로 �용할 수 있는 변수와 메소드를 정�하고 있다.
�스턴스(Instance):(�어낸 벽�)
�래스를 실제로 사용할 수 있�� 선언하는 것
�체(Object)
��(Inheritance)
�위�래스가 가지고 있는 특성들� 하위�래스�서 사용할 수 있다.
다형성(Polymorphism)
여러개� �래스가 같� 메시지� 대해서 ��� 방법으로 작용할 수 있는 능력�다.
연산� 다중 정�(overloading),함수 다중 정�,함수 재정�(overriding)등� 있다.

나.�래스정� � �스턴스(�체) �성
�래스 정�
~cpp 
class �래스�름 {

   // 변수 선언부

      …

   // 메소드 선언부

      …

}
�스턴스 �성
~cpp 
�래스�름 �래스�스턴스�름 = new �래스�름();

�는

�래스�름 �래스�스턴스�름;

�래스�스턴스�름 = new �래스�름();
다.변수 � 메소드� 접근제어
public:같� �래스, 하위�래스, 같� 패키지내� 있는 �래스�서 접근가능
private:같� �래스�서만 접근가능
protected:같� �래스, 하위�래스, 같� 패키지내� 있는 �래스�서 접근가능
friendly(�략):같� �래스, 같� 패키지내� 있는 �래스�서 접근 가능

�.메소드� 다중정�
함수다중정�:같� �름� 함수가 여러개 존재하는 것
연산�다중정�:같� �름� 연산�가 �래스� 따� 다른 연산� 수행할 수 있�� 하는 것
->�바�서 제공하지 않�

2.�체 �성�와 �체 �성 과정

가.�체�성�
~cpp 
�래스�름(형�매개변수 리스트) { … }

�래스�름(형�매개변수 리스트) {

다른 ê°�ì²´ ìƒ�성ìž� 호ìœ; // 반드시 첫번째 줄ì—�서 ì�´ë£¨ì–´ì ¸ì•¼ 함.

 …

}

�래스�름 변수�름 = new �래스�름(실매개변수 리스트);
나.this
다.�래스멤버와 �스턴스 멤버
�래스 변수와 �래스 메소드� 선언)
~cpp 
[접근권한] static 변수 선언;

[접근권한] static 메소드 선언;

�래스 변수와 �래스 메소드� 접근)

�래스�름.�래스메소드()

�래스메소드()

�체참조값.�래스메소드()

�. �래스 초기화 � �체� �성 과정
�래스 변수� 초기화 � 초기화 블�
~cpp 
static 변수선언=초기값;

�는

static 배열형변수선언=new 배열형;

static {

여러 개� 변수들� 초기화

�는

배열� 초기화;

}

3.��

... 계� �는중 ...

OOP� 특성

캡�화, 메시지, �래스, �스턴스, �체, ��, 다형성
위� 간단하게 설명� 있습니다

질문

  • ì�¸ìŠ¤í„´ìŠ¤ì™€ ê°�ì²´ê°€ 비슷한 ì�˜ë¯¸ì�¸ê²ƒ ê°™ì�€ë�° ì°¨ì�´ëŠ”?
    차�는 없습니다. 같� �미입니다^^;
  • publicê³¼ protectedì�˜ ì°¨ì�´ëŠ”?
    아� ��� �고 있는 중�기 때문� 모르는 것�지요^^. private 과 protected 는 ��� �루어지지 않으면 똑같� 사용� �니다. 하지만 ��� �루어진다면 �미는 틀려지죠. 만약 ��차 �는 �체가 있다고 봅시다. 그런� �것� 굉장히 추��� 개��지요. � ��차 � 하위 개�� 트럭 과 버스 와 승용차 를 ��차�서 ��받아 만들었다고 합시다. 그랬� 때 ��차 가 가지는 어떠한 �태는 트럭 과 버스 와 승용차� 역시 가지고 있� 수� 있습니다. �런 경우 protected 로 선언해 주면 그 �태를 ��받� 수 있다는 것�지요. 하지만 외부�서 접근� 불가능하다는 사실� 변함� 없습니다. 하지만 public � 외부�서 접근� 가능하게 �는 것�지요. 한번 �접 코드로 만들어보세요. 어떻게 다른지 채험하는게 가장 �해가 쉬울�니다.

과제 추가 내용

  • 와우~ 벌ì�¨ 저정ë�„로 설계가 가능하다니 놀ë�¼ìš´ë�°ìš”? ^^; ì •ë§� 실력ì�´ 뛰어난거 아님 어디서 참고를 í–ˆì�„ 가능성ì�´ 있겠군요. ì§�ì ‘ 하셨나요? 아니면 다른 소스를 참고하셨나요?
  • ì�´ 소스를 ì�´ë ‡ê²Œ 바꿔보세요. 가는 ë°©í–¥ì�„ 입력받아 움ì§�ìž„ -> 바퀴벌래 ë‘�마리를 올려놓ì�Œ -> 바퀴벌래를 장기ì—�서 차가 가는 방법으로 바꿈.
  • ìž�ë°”ì—�서 메소드는 처ì�Œ 시작할 때 소문ìž�입니다. 대문ìž�로 시작하는 것ì�€ í�´ëž˜ìФì�´ì§€ìš”.
  • ë‚´ìš©ì�„ 1페ì�´ì§€ ì�´ë‚´ë¡œ 줄어보세요.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:31
Processing time 0.0080 sec