3.1 객체지향과 절차지향
*객체지향의 배경
-소프트웨어 모듈의 재사용과 독립성을 강조
*객체
-효율적인 정보관리를 위해 의미를 부여하고 분류하는 개념적인 단위
*객체지향:객체들이 메세지를 통해 통신함으로써 원하는 결과를 얻는다. 각 객체는 데이터와 데이터를 처리할수 있는 메소드로 구성.
객체(데이터1—> 메소드1)—>메세지—>객체(메소드2—>데이터2)
*절차지향: 알고리즘으로 구성
*객체의 구성
데이터 : 속성의 값
메소드 : 데이터를 변경하거나 조작할수 있음
아버지객체 :데이터(자동차, 돈,술, 몽둥이, 신문, 담배)
메소드 (운전을한다, 술을마신다. 담배를 피운다 몽둥이로 때린다 신문을 읽는다 )
아들객체 : 데이터(장난감, 과자, 동화책 게임기)
메소드 (과자를 먹는다. 동화책을 읽는다.)
—————————–
클래스(CLASS)
객체는 항상 클래스로 부터 생성.
학생1(객체이름)=new(객체생성 명령어) 학생(클래스이름)<이기쁨,남자,컴퓨터공확과>(매개변수데이터)
instance : 클래스로 부터 생성된 객체
*정보처리의 주체(객체)
객체지향프로그래밍의 시작은 클래스의 생성이다.
——————————–
상속(inheritance)
클래스는 계층구조를 구성
상위계층의 모든 요소 상속
추가적으로 필요로 되는 새로운 자료구조와 매소드를 추가 하여 하위계층의 클래스 생성
-소프트웨어의 재사용을 위해 상속 필요
일반화
-공통속성 가짐
-속성이 간단
특수화
-상위속성 상속
-개별속성 추가
-속성이 많다.
====속성을 상속하여 새로운 클래스를 생성===
——————————–
캡슐화(encapsulation)
객체를 작성할때 숨겨야 하는 정보(private)와 공개해야하는 정보(public)를 구분하여 작성
객체의 사용자는 기능만 알고 사용하며, 어떻게 처리되는지는 은폐한다. (information hiding)
c(공개하는부분)<—-00000000(공개되지 않음)——a+b(공개하는부분)
캡슐화의 장점
1. 객체에 포함된 정보의 손상과 오용을 막을수 있다.
2..객체의 조작방법이 바뀌어도 사용방법은 바뀌지 않는다.
3.데이터가 바뀌어도 독립성을 유지한다.
4.처리된 결과만 사용하므로 객체의 이식성이 좋다.
5.개체를 부품화 할수 있어 새로운 시스템의 구성에 부품처럼 사용(어떻게 동작하고 무었을 하는 기능인지 알면 사용가능)
——————————–
다형성(Polymorphism)
하나의 인터페이스, 구현되는 개수는 여러개
모형(draw())-타원(draw(){타원을그린다.}
-사각형
-삼각형
추상클래스-추상메소드-오버로딩
-오버라이딩
——————————–
메세지(message)
객체에게 일을 시키는 행위
메세지는 세가지요소로 구성
1.메세지를 받을 객체의 이름(주소)
2.송신객체가 실행을 원하는 수신객체의 메소드 이름
3.실행을 원하는 메소드에 전달할 매개변수
수신객체<=메시지(객체이름,메소드(매개변수))<=송신객체
Ex)
int xPosition;
int yPosition;
boolean status;
Color color;
void move(int x, int y);
void setColor(Color c);
void penUp();
void PenDown();
———————Class P—–
public class Point1{
P point;
public static void main(String args[]){
point = new(P); //객체생성
point.move(10,10);//메세지사용
point.setColor(blue);
point.penUp();
point.penDown();
}
}
객체들은 자신이 가지는 고유의 데이터만 가지고 생성되며 메소드는 클래스에 잇는것을 공유한다.
——————————–
객체지향의 개념과 자바프로그램
class A {
int result;
public int add(int x,int y){
result =x+y;
return result;
}
public int subtraction(int x,int y){
result = x-y;
return result;
}
}
class B extends A{ //클래스 A로 부터 상속받아 클래스 B 생성
int result;
public int multi(int x,int y){
result =x*y;
return result;
}
public int divide(int x,int y){
//클래스 B는 A로 부터 상속되었으므로 A의 메소드를 사용할수 있다.
result =x/y;
return result;
}
}
클래스로부터 객체의 생성
class TestAB{
public static void main(String args[]){
int temp;
A objecta = new A();
B objectb =new B();
temp = objecta.add(10,20);//객체에게 메세지를 보낸다.
System.out println(temp);
temp=objectb.add(1,2);//a의 값을 상속받았기 때문에 add()사용가능
System.out println(temp);
temp=objectb.multi(2,2);
System.out println(temp);
//————–error——-objecta 객체는 multi() 메소드를 가지고 있지 않으므로 에러
temp= objceta.multi(20,20);
System.out.println(temp);
}
}