Class diagram. 클래스 클래스 이름 연산 속성 2 class Transportation { private int maximumPassenger; private double speed; public void depart(); public void stop();

Slides:



Advertisements
Similar presentations
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
Advertisements

어서와 Java는 처음이지! 제3장선택과 반복.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
UML의 모델링의 본질 다이어그램으로 쉽게 보이는 UML
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
C++ Espresso 제1장 기초 사항.
객체지향 프로그래밍.
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
7장 배열 ②.
Java Seminar Chapter3.
12장. JSP에서 자바빈 활용 제12장.
Java Presentation 중간 시험2 풀이
Java로 배우는 디자인패턴 입문 Chapter 0. UML 과 Design Pattern
9 표준 액션.
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
8. 객체와 클래스 (기본).
정적 메소드와 정적 변수 상수 래퍼 클래스 포매팅
명품 JAVA Programming.
C++ Espresso 제9장 다형성.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
프로그래밍 언어론 제 9 장 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS
화면(UI) 기반 도메인모델 작성 2014년 8월.
명품 JAVA Essential.
명품 Java Programming.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
윤 홍 란 4 장 클래스 작성 윤 홍 란
2010학년도 2학기 객체지향의 이해.
C++ Programming: chapter 7 – inheritence
인터페이스(Interfaces) 강원대학교.
김 정 석 Web Programming 김 정 석
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
주소록 프로그램.
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
Web programming Chap 04 상속 김 정 석
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
프로그래머를 위한 첫걸음 JDBC Lecture 001 BY MINIO
JA A V W. 04.
JA V A W. 07 Sb.L.
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
3D Shapes 3개 핵심 Properties가 존재 1.Material 표면의 재질을 설정합니다.
[ 단원 06 ] 상속과 다형성.
자바 5.0 프로그래밍.
제 11 장 자바빈즈를 이용한 JDBC 프로그래밍 학기 인터넷비즈니스과 강 환수 교수.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
자바 프로그래밍 Thread를 이용한 애니메이션 서울호서전문학교 게임프로그램개발과.
Java 5장. 객체지향 개념 public class SumTest {
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
Lecture 05 문자열, 배열, 디버깅 Kwang-Man Ko
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

Class diagram

클래스 클래스 이름 연산 속성 2 class Transportation { private int maximumPassenger; private double speed; public void depart(); public void stop(); }

속성 – 기본 개념

속성  객체의 상태 / 정보를 표현하기 위한 수단 모니터 객체들의 상태 / 정보를 표현 직원 객체들의 상태 / 정보를 표현 4

가시성 (scope)  속성에 대한 접근 권한 가시성의 유형표기법설명 공용 (public) ‘+’ 클래스 외부에서도 접근 가능 보호 (protected) ‘#’ 하위 클래스에서도 접근 가능 패키지 (package) ‘~’ 클래스가 소속된 동일 패키지에서도 접근 가능 전용 (private) ‘-‘ 클래스 내부에서만 접근 가능 5

이름, 유형 (type)  이름 : 각 속성을 고유하게 식별하기 위한 명칭  유형 : 속성이 가질 수 있는 값의 범위를 결정 유형의 종류설명 Integer UML 2.5 표준에 정의된 기본 유형 Boolean String UnlimitedNatural Real Date java.util.Date 패키지에 정의된 유형 Color, Gender 사용자 정의 유형 6

다중성 (multiplicity), 초기값  다중성 : 동일한 이름의 속성값이 여러 개 있음을 표현  “– phoneNumber : String[2]” 는 전화번호를 2 개 가질 수 있음을 뜻함  phoneNumber[0], phoneNumber[1] 의 형태로 접근할 수 있음  초기값 : 객체 생성 시 속성에 대입되는 값 Gender.java public enum Gender { FEMALE, MALE } Person.java import java.util.Date ; class Person { private String name; private String address; private String[] phoneNumber = new String[2]; private Date birthDate; private int age = 1; private Gender gender = Gender.MALE; } 7 Person -name : String -address : String -phoneNumber : String[2] -birthDate : Date -age : int = 1 -gender : Gender = MALE

속성 표기법  표기 형태 : “ 가시성 이름 : 유형 [ 다중성 ] = 초기값 ”  필수 요소 : 가시성, 이름, 유형 8

인스턴스 범위 속성, 클래스 범위 속성  인스턴스 범위 속성 : 객체 단위로 적용되는 속성  클래스 범위 속성 : 클래스 단위로 적용되는 속성 totalWindowCount 는 클래스 범 위 속성임 9 public class Window { private static int totalWindowCount; private Color color; … } Window -leftTop : Position -rightBottom : Position -Caption : String -color : Color -totalWindowCount : int

유도 (derived) 속성 (1/2)  유도 속성 : 다른 속성에 의해 그 값이 결정되는 속성  유도 속성의 값이 다른 속성으로부터 어떻게 계산되는지 명시적으로 기술하는 것이 좋음 10

유도 (derived) 속성 (2/2)  유도 속성의 값은 같은 클래스에 속한 다른 속성들뿐만 아 니라 다른 클래스와의 관계를 통해 결정될 수도 있음 11

속성 – 기본 원칙

 속성의 이름은 구체적이어야 함 작명 규칙 (1/2) 부적절한 예설명적절한 예 연료 연료유형인지 연료량인지 연비 인지 명확하지 않음 연료유형 연료량 연비 탑승인원 현재 탑승인원인지 최대 탑승인 원인지 평균 탑승인원인지 명확 하지 않음 현재 탑승인원 최대 탑승인원 평균 탑승인원 해상도 최대 해상도인지 표현 가능한 해 상도 범위인지 명확하지 않음 최대 해상도 표현가능 해상도 [0 ~ 255] 연락처 유선 전화번호인지 무선 전화번 호인지 전자우편 주소인지 명확 하지 않음 유선 전화번호 무선 전화번호 전자우편 주소 13

작명 규칙 (2/2)  속성의 이름으로 특정 프로그래밍 언어, OS, 미들웨어, 프 레임워크 등이 언급되어서는 안 됨 부적절한 이름적절한 이름설명 사용자이름 텍스트박스사용자이름 텍스트박스, 필드, 콤보박스 등은 UI 구현에 필요한 UI component 이고 이는 얼마든 지 바뀔 수 있기 때문에 이름 에 포함시키기에 부적절함 암호 필드암호 광역시이름 콤보박스광역시이름 방문할 층 번호 배열방문할 층 번호 배열은 자료구조의 한 종류 이고 자료구조는 얼마든지 바뀔 수 있기 때문에 이름에 포함시키기에 부적절함 14

응집도 (cohesion) 에 따른 클래스 분할  속성들 간의 연관성이 낮을 땐 비슷한 속성들끼리 묶어 클 래스를 분할하는 것이 바람직함 15

속성 – 실용 지침

데이터타입을 이용한 클래스 분할  유사한 속성들을 묶어 데이터타입을 정의하면 클래스를 보다 간결하고 명확하게 정의할 수 있음 17

유도 (derived) 속성 사용의 이점  유도 속성의 갱신횟수보다 조회횟수가 더 많으면 유도 속 성을 사용함으로써 성능상 이점을 얻을 수 있음 유도 속성을 사용하지 않을 때유도 속성을 사용할 때 public class Window { private Position leftTop ; private Position rightBottom ; … public int getWidth() { return rightBottom.x – leftTop.x ; } public int getHeight() { return rightBottom.y – leftTop.y ; } public class Window { private Position leftTop ; private Position rightBottom; private int width, height ; public int getWidth() { return width ; } public int getHeight() { return height ; } public void setLeftTop(Position p) { leftTop = p ; updateWidth() ; updateHeight() ; } public void setRightBottom(Position p) { rightBottom = p ; updateWidth() ; updateHeight() ; } private void updateWidth() {width = rightBottom.x–leftTop.x ;} private void updateHeight() {height = rightBottom.y–leftTop.y ;} } 18

연산 - 기본 개념

연산  객체의 행위 (behavior) 를 나타내기 위한 수단 20

연산 표기법  표기 형태 : 가시성 연산 이름 ( 매개변수 1, 매개변수 2, …) : 반환 유형  매개변수는 매개변수 이름 : 매개변수 유형으로 표기  필수 요소 : 가시성, 연산 이름, 반환 유형 21

추상 연산, 추상 클래스  추상 연산 : 연산에 대한 선언만 있고 정의는 없음  추상 클래스 : 객체를 생성할 수 없는 클래스 22 public abstract class ClosedShape { private double area = 9.0; private int length; public abstract void draw(); public double getArea() { return area; } public abstract int getLength(); }

연산 - 기본 원칙

연산의 일관성  연산은 하나의 기능을 제공해야 함 24

응집도 (cohesion) 에 따른 클래스 분할  연산 간의 연관성이 낮을 땐 관련 있는 연산끼리 묶어서 클래스를 따로 정의하는 것이 바람직함 25

연산 – 실용 지침

데이터타입을 이용한 매개변수 및 반환 유형 정의 (1/2)  연관성이 높은 데이터들을 대상으로 데이터타입을 정의 하여 연산의 매개변수나 반환 유형으로 사용할 수 있음 27

데이터타입을 이용한 매개변수 및 반환 유형 정의 (2/2)  연관성이 낮은 데이터들은 데이터타입을 정의하지 않는 것이 좋음 28

연관관계 – 기본 개념

연관관계의 표현 (1/4)  양방향 연관관계 class Professor { Assistant assistant ; public void searchMajor() { … } public void searchGrade() { … } } class Assistant { Professor professor ; public void prepareClass() { … } } 30

연관관계의 표현 (2/4)  단방향 연관관계 class Professor { private Assistant assistant ; public void searchMajor() { … } public void searchGrade() { … } } class Assistant { private Professor professor ; public void prepareClass() { … } } 31

연관관계의 표현 (3/4)  다중성 있는 연관관계 class Professor { private Collection lectures ; public void searchMajor() { … } public void searchGrade() { … } } class Lecture { private Professor professor ; public void searchProfessor() { … } public void searchNumOfStudent() { … } public void searchClassHour() { … } } 32

연관관계의 표현 (4/4)  다중 연관관계 class Professor { private Collection counselSt udents ; private Collection lectureSt udents ; public void searchMajor() { … } public void searchGrade() { … } } class Student { private Professor adviseProfessor ; private Collection lectureProf essors ; public void searchGrade() { … } public void searchSchoolYear() { … } } 33

연관관계 – 기본 원칙

연관관계와 연산의 가시성  연산의 가시성에 따라 연산을 호출할 수 있는지, 없는지 여 부가 결정됨 35 class Client{ private Supplier supplier; public void op() { supplier.publicOp(); … } … }

연관관계 표현 시 유의할 점  호출하는 연산의 개수 만큼 연관관계를 줄 필요가 없음 36

연관관계 – 실용 지침

교수 클래스조교 클래스 class Professor { private int minSize = 1 ; private int maxSize = 5 ; private Collection assistants = new ArrayList (); public void addAssistant(Assitant assistant) { assert assitants.size() < maxSize ; assistants.add(assistant); } public void removeAssistant(Assistant assistant) { assert assistants.size() > minSize ; assistants.remove(assistant) ; } class Assistant { Private Professor professor ; public void setProfessor(Profess or _professor) { professor = _professor ; } 프로그래밍 언어를 통한 다중성 (multiplicity) 표현 38  객체 레퍼런스 수에 대한 제약은 추가적인 구현이 요구됨

집합관계와 포함관계 – 기본 개념

집합 / 포함관계  한 객체가 다른 객체에 종속되어 있음을 나타냄 전체 부분 집합관계 포함관계 40

집합관계 (shared aggregation) 의 특징  집합관계에선 종속된 객체를 여러 객체들이 공유할 수 있 음 41

포함관계 (composite aggregation) 의 특징  포함관계에선 종속된 객체가 단 하나의 객체에만 소속돼 있음 42 P1 : Project P2 : Project T1 : Team T2 : Team M1: Member M2: Member

집합관계와 포함관계 – 기본 원칙

집합 / 포함관계의 비대칭성과 이행성  비대칭성 (asymmetry): 양방향 관계가 성립 안 됨  이행성 (transitivity): A 가 B 를 포함하고, B 가 C 를 포함하면 A 는 C 를 포함함 44 단락은 문자를 포함함

일반화관계 – 기본 개념

draw() erase() getLength() getArea() draw() erase() getLength() 일반화관계의 특성 및 표현 (1/9)  하위 클래스는 상위 클래스의 속성과 연산을 물려받음 46

일반화관계의 특성 및 표현 (2/9) 47 Shape 클래스 OpenShape 클래스 class Shape { public void draw() { … } public void erase() { … } public int getLength() { … } } class OpenShape extends Shape { }

일반화관계의 특성 및 표현 (3/9)  하위 클래스 고유의 정보와 기능을 제공하기 위해 속성 / 연산을 추가할 수 있음 48

일반화관계의 특성 및 표현 (4/9) ClosedShape 클래스 Polygon 클래스 class ClosedShape extends Shape { private Color fillColor ; public float getArea() ; } class Polygon extends ClosedShape { private Point[] points ; public int getNumberOfSide() }{ … } public int getInsideAngle() { … } } 49

일반화관계의 특성 및 표현 (5/9)  하위 클래스는 물려받은 연산을 재정의 (override) 할 수 있음 50

일반화관계의 특성 및 표현 (6/9) Polygon 클래스 class Polygon extends ClosedShape { private Point[] points ; public void draw() { … } public void erase() { … } public int getLength() { … } public float getArea() { … } … } 51

일반화관계의 특성 및 표현 (7/9) 추상연산 추상 클래스 52  추상 연산은 반드시 구체화 되어야 함

일반화관계의 특성 및 표현 (8/9) ClosedShape 클래스 Polygon 클래스 class ClosedShape extends Shape { private Color fillColor ; public abstract float getArea() ; } abstract class Polygon extends ClosedShape { private Point[] points ; public int getNumberOfSide() }{ … } public float getArea() { … } … } 53

일반화관계의 특성 및 표현 (9/9)  일반화관계는 다형성 (polymorphism) 을 가능케 함 54 ClosedShape cs = new Polygon(); cs.getArea(); ClosedShape 클래스의 연산 대신 자식 클래스의 연산이 호출됨 ClosedShape 클래스의 객체 대신 자식 클래스의 객체를 생성

일반화관계 – 기본 원칙

일반화관계 표현 시 유의할 점 (1/2)  상위 클래스의 속성 / 연산이 일부 하위 클래스에만 의미 있 어선 안 됨 56

일반화관계 표현 시 유의할 점 (2/2)  하위 클래스와 상위 클래스 간에 is-a 관계가 만족돼야 함 57

일반화관계 – 실용 지침

추상 클래스와 인터페이스의 차이  구체 클래스, 추상 클래스, 인터페이스의 비교  추상 클래스와 인터페이스의 비교 구체 클래스 추상 클래스 인터페이스 객체의 생성 가능불가능 용도기능의 구현기능의 명세 추상 클래스인터페이스 속성 및 구현 포함 여부 포함 가능포함 불가능 59

의존관계 – 기본 개념

연관관계와 의존관계의 차이 (1/3)  연관관계와 의존관계의 비교 연관관계의존관계 관계의 발생 형태클래스의 속성으로 정의 연산의 매개변수 유형으로 정의 연산 내부에 객체를 생성 연산 내부에서 전역 객체에 접근 관계의 지속 범위객체가 소멸될 때까지연산이 종료될 때까지 방향성양방향 가능단방향 61

연관관계와 의존관계의 차이 (2/3)  연관관계 class Class1 { private Class2 aClass2 ; public void op11() { aClass2.op2() ; } public void op12() { aClass2.op2() ; } 62

연관관계와 의존관계의 차이 (3/3)  의존관계 class Class3 { public void op31(Class4 arg) { arg.op4() ; } public void op32() { Class5 c5 = new Class5() ; c5.op5() ; } public void op33() { Class6::op6() ; } 63

의존관계와 인터페이스  의존관계를 통해 인터페이스와 인터페이스 사용자 간의 관계를 나타낼 수 있음 의존관계 : Canvas 클래스는 Idrawable 인터페이스에 의존함 인터페이스 실체화 (realization) 관계 : Face 클래스는 IDrawable 인터페이스를 실체화함 64