복합객체
객체는 다른 객체를 포함할 수 있다. 그 복합 객체를 생성하는 것은 모든성의 원리를 사용하고 높은 수준의 관람을 구 하는 좋은 방법이다. 대부분 자연에서 객체는 독립적이지만 다른 구성요소와 관련해 작동하는 구성요소를 가진다. 생활 으로 비유하면 세포 클래스는 근육조직과 신경조직에 조합될 수 있다.
이 조직은 장기로 조합되고 장가는 유기세로 조형 다. 여러 층위의 관념에서 각 단계는 이전 층위의 합성물로 만들어진다. 자전거 클래스는 다른 종류의 예시를 제공한다 전거 클래스는 프레임, 바퀴, 브레이크, 구동력 등의 객체로 이루어지며 이 각 단위들은 다른 클레스로부터 구축될 수 예를 들어 구동렬은 폐달, 크랭크. 기어 등의 객체로 구성된다.
아래 프로그램은 Egg 클래스(357족)와 Ring 클래스(358족)를 조합해 Egc Ring이라는 새로운 클래스를 만들어 이 클래스는 oroid라는 생성자에서 만든 Fg: 객체를 가지며 클래스를 기초로 만든 cick이라는 Ring 매체를 갖고 transmit() 함수는 양 클래스의 메소드를 호출하고 객체가 최대 사이즈에 도달하면 cicke을 초기화한다. 클레스를 사용 모든 예시와 마찬가지로 프로젝트가 실행되도록 하려면 참조한 클래스는 반드시 스케치에 포함되어 있어야 한다.
// Requires Egg and Ring classes (codes 25-08 and 25-10)
class EggRing (
Egg ovoid;
Ring circle = new Ring();
EggRing(int x, int y, float t, float sp) |
ovoid = new Egg(x, y, t, sp);
circle, start(x, y - sp/2);
}
void transmit) {
ovoid, wobble();
ovoid, display);
circle, grow();
circle, display();
if (circle.on == false) {
circle.on = true;
}
}
}
상속
클래스는 다른 클래스를 기초로 정의될 수 있다. 객체지향 프로그래밍 용어에서 클래스는 다른 클래스의 필드와 메소드 를 상속할 수 있다. 다른 오브젝트로부터 상속하는 클래스는 서브클래스이고 상속을 주는 클래스는 슈퍼클래스다. 서브클래 스는 슈퍼클래스를 확장시킨다.
한 클래스가 다른 클래스를 확장시킬 때 슈퍼클래스의 모든 필드와 메소드는 자동적으로 서 브클래스에 포함된다. 새로운 필드와 메소드를 서브클래스에 추가해 데이터와 슈퍼클래스의 행동을 구축할 수 있다.
일반적 으로 특화된 클래스 행동이 필드와 메소드를 교체하거나 추가해 서브클래스를 선택적으로 변경하고 확장시키므로 더 특화 된 클래스가 더 일반적인 클래스를 확장시킨다.
메소드의 이름이 서브클래스 안에서 반복되고 같은 시제품(같은 데이터 유형에 같은 매개변수 숫자)을 슈퍼클래스로 갖 고 있다면 서브클래스의 메소드가 다른 메소드를 덮어씌워 대체한다.
슈퍼클래스의 메소드나 필드가 서브클래스에서 호출되면 소프트웨어가 메소드나 필드가 슈퍼클래스의 일부임을 인지할 수 있도록 ‘super 라는 키워드를 이름 앞에 붙인다. 아래 예시는 이 새로운 용어와 개념을 밝힌다.
Spin 클래스는 상속 개념을 설명하기 위해 만들어졌다. 이 최소한의 클래스는 x 좌표, y좌표, 속도, 각도를 설정하기 위한 필드를 갖고 있다. 이 클래스에는 각도를 업데이트하기 위한 1개의 메소드가 있다.
class Spin {
float x, y, speed;
float angle = 0,0;
Spin (float xpos, float ypos, float s) | × = xpos;
y = ypos;
speed = s;
}
void update() {
angle += speed;
}
}
SpinArm 클래스는 Spim의 요소를 상속하고 슈퍼클래스의 데이터를 이용해 선을 긋는다. SpinArm의 생성자는 단순 히 슈퍼클래스의 생성자를 호출한다. display() 함수는 상속된 x, 5, angle, speed 필드를 회전하는 선을 그리기 위해 사용 한다. 상속된 필드가 서브클래스에서 접근할 수 있으므로 이 필드의 선언이 서브클래스에서 반복되지 않았음에 주목하라.
SpinArm 생성자에서 super( )은 Spin 슈퍼클래스의 생성자를 호출하기 위해 사용한다. 만약 매개변수가 있는 super()가 서 브클래스의 생성자에 사용되지 않았다면 매개변수가 없는 super()을 호출하는 코드는 배경 뒤에 삽입될 것이다.
이러한 이 유로 확장시키려는 클래스는 모든 서브클래스가 super()을 명시적으로 호출하는 이 예시와 같은 경우를 제외하면 매개변수 가 없는 버전의 생성자를 요구할 것이다.
class SpinArm extends Spin {
SpinArm(foat x, float y, float s) (
super(x, y, s);
}
void display() {
strokeWeight(1);
stroke(0);
push Matrix);
translate (x, y);
angle += speed;
rotate(angle);
line (0, 0, 100, 0);
popMatrix();
}
}