Upload
-
View
154
Download
0
Embed Size (px)
Citation preview
캡슐화 (Cabsulate)
Tell Don’t ask데이터를 묻지말고 기능을 실행
Method 에서 생성한 객체의 Method 만 호출Parameter 로 받은 객체의 Method 만 호출
필드를 참조하는 객체의 Method 만 호출
Method &Vari-ables
Class
캡슐화 (Cabsulate)
class SinivelCap {void Task() {
System.out.println(" 콧물이 멈추기 시작합니다 ..");}
}class SneezeCap {
void Task() {System.out.println("
재채기가 멈추기 시작합니다 ..");}
}class SnuffleCap {
void Task() {System.out.println(" 코가
뚫리기 시작합니다 ...");}
}
public class ColdPatient {public static void main(String[] args) {
ColdPatient cp = new Cold-Patient();
SinivelCap 콧물 = new SinivelCap() ;
SneezeCap 재채기 = new SneezeCap() ;
SnuffleCap 코가뻥 = new SnuffleCap();
cp.TaskSinivelCap( 콧물 );cp.TaskSneezeCap( 재채기 );cp.TaskSnuffleCap( 코가뻥 );
}void TaskSinivelCap(SinivelCap 콧물 ) { 콧물 .Task();};void TaskSneezeCap(SneezeCap 재채기 ) { 재채기 .Task();};void TaskSnuffleCap(SnuffleCap 코가뻥 ) { 코가뻥 .Task();};
}
캡슐화 (Cabsulate)
코감기는 항상 콧물 , 재채기 , 코막힘을 동반한다 .
class SinivelCap class SneezeCap class SnuffleCap
복용 순서는 SinivelCap, SneezeCap, SnuffleCap 순이다 .
IF순서대로 복용하지 않을시 큰일이 벌어진다면 ?
“ 상관 관계를 매우 잘 알아야하는 문제에 놓였다”
캡슐화 (Cabsulate)
public class ColdPatient {public static void main(String[] args) {
Contac600 contack = new Contac600();
ColdPatient cp = new ColdPatient();
cp.Task(contack);}void Task(Contac600 contack) {
contack.Task();}
}
class Contac600 {private SinivelCap 콧물 ;private SneezeCap 재채기 ;private SnuffleCap 코가뻥 ;public Contac600() {
// TODO Auto-generated constructor stub
콧물 = new SinivelCap() ;재채기 = new SneezeCap() ;코가뻥 = new SnuffleCap();
}void Task() {
콧물 .Task();재채기 .Task();코가뻥 .Task();
}
}
외부에서 약물이 수정되어서는 안된다 !
순서대로 복용이 지켜질수 밖에 없다 .
상속성 (Extends)
Class Cat {boolean eye;boolean ear;boolean nose;String name;
}
Class Bear {boolean eye;boolean ear;boolean nose;String name;
}
Class Dog {boolean eye;boolean ear;boolean nose;String name;
}
셋다 동물이다 !
상속성 (Extends)public class Ground {
public static void main(String[] args) {고양이 야옹이 = new 고양이 ();강아지 멍멍이 = new 강아지 ();곰 곰팅이 = new 곰 ();
}}class 동물 {
boolean eye;boolean ear;boolean nose;String name;void move() {
System.out.println(" 움직입니다 .");}
}class 고양이 extends 동물 {
public 고양이 () {// TODO Auto-generated constructor
stubeye = true;ear = true;nose = true;name = " 고양이 ";
} @Overridevoid move() {super.move()}
}
class 강아지 extends 동물 {public 강아지 () {
// TODO Auto-generated constructor stubeye = true;ear = true;nose = true;name = " 강아지 ";
} @Overridevoid move() {super.move()}
}
class 곰 extends 동물 {public 곰 () {
// TODO Auto-generated constructor stubeye = true;ear = true;nose = true;name = " 곰 ";
} @Overridevoid move() {super.move()}
}
다형성 (polymophizem)
고양이 , 강아지 , 곰은 동물을 상속받기에동물의 이름으로써 고양이 강아지 곰의 메소드를 쓸수있다 .
public class Ground {public static void main(String[] args) {
동물 야옹이 = new 고양이 ();동물 멍멍이 = new 강아지 ();동물 곰팅이 = new 곰 ();
}}
추상클래스상속 받을시 반듯이 재정의 하여야하는 클래스
추상 메서드를 가지고 있다 .
상속 받았을때 내가 원하는 것을 반듯이 재정의하여 쓸수 있게
할 수는 없을까 ????
abstract class 동물 {boolean eye;boolean ear;boolean nose;String name;void move() {
System.out.println(" 움직입니다 .");}
abstract void bark();}
추상클래스
Class Cat extends 동물 {boolean eye;boolean ear;boolean nose;String name;@Overridevoid move(){super.-move()}@Overridevoid bark(){ };
}
Class Bear extends 동물 {boolean eye;boolean ear;boolean nose;String name;@Overridevoid move(){su-per.move()}@Overridevoid bark(){ };
}
Class Dog extends 동물 {boolean eye;boolean ear;boolean nose;String name;@Overridevoid move(){su-per.move()}@Overridevoid bark(){ };
}
모두 다르게 짖기에 알아서 정의해 쓰시오 !
인터페이스
동물
눈 O코 O귀 O걷다 O수영 X
눈 O코 O귀 O걷다 O수영 X
눈 O코 O귀 O걷다 O수영 X
눈 O코 O귀 O걷다 O수영 O
오리는 동물이다 . 하지만 고양이 , 곰 , 강아지는 수영을 못하지만오리는 수영을 할수있다 . 객체지향 설계에 문제가 생기기 시작한다 !
인터페이스
interface 수영 {boolean swim_check = false;void swimming(boolean swim_check);
}
오리는 수영을 할수있다 ! 그렇기에수영이라는 Interface 를 만든다
Interface 는 추상 메서드를 가지고있는 Class 이다 .오직 추상 메서드만을 가질수 있다 .
인터페이스
interface 수영 {boolean swim_check = false;void swimming(boolean swim_check);
}
오리는 수영을 할수있다 ! 그렇기에수영이라는 Interface 를 만든다
Interface 는 추상 메서드를 가지고있는 Class 이다 .오직 추상 메서드만을 가질수 있다 .
인터페이스class 오리 extends 동물 implements 수영 {
public 오리 () {// TODO Auto-generated con-
structor stubeye = true;ear = true;nose = true;name = " 오리 ";
}@Overridevoid move() { super.move();}@Overridevoid bark() {}@Overridepublic void swimming(boolean swim_check) {}
}