객체 지향 - 클래스 상속과 다형성

상속 1 정의

상속은 의미 : 당신은,이 기능은 원래 클래스의 경우 확장 재 작성할 필요없이 기존 클래스의 모든 기능을 사용할 수 있습니다.

(1) "하위 클래스"또는 불리는 상속하여 새로운 클래스 만들기 "파생 클래스를."

(2) 클래스가 "기본 클래스", "부모"또는이라고 상속 "슈퍼 클래스."

일반에서 특정 프로세스에,이다 승계 과정. 상속을 달성하기 위해, "상속"(상속) 및 "결합"(조성)에 의해 달성 될 수있다.

특정 OOP 언어에서, 서브 클래스는 기본 클래스의 복수를 상속합니다. 그러나 정상적인 상황에서, 서브 클래스는 다중 상속을 통해 달성 될 수있는 다중 상속을 구현하는 하나의 기본 클래스를 가질 수 있습니다.

2 유전 분류

상속, 인터페이스 상속 : 상속의 개념의 구현은 주로 두 가지 유형입니다.

(1) 구현없이 상속 부호화 추가 속성과 기본 클래스의 메소드의 능력을 의미한다;

(2) 인터페이스 상속의 이름은 속성과 방법이지만, 서브 클래스는, (부모 서브 클래스 재건 방법)를 구현 할 수있는 기능을 제공해야합니다;

상속의 사용을 고려할 때, 한 가지 두 클래스 사이의 관계는 관계 "의 일부"인 것을 유의한다.

추상 클래스는 일반 속성과 서브 클래스에서만 생성 방법을 정의합니다.

OO 개발 패러다임 약 : 계층 구조로 구성 추상 클래스 부문 → → 개체 클래스 (상속과 합성) 설계 및 구현 단계와 예 → 클래스입니다.

3, 샘플 코드

#!는 / usr / 빈 / ENV 파이썬

# - * - 코딩 : UTF-8 - * -

# 저자 : ZhengzhengLiu

# 클래스 상속

classPeople :

def__init의 __ (자기, 이름, 나이) :

        self.name = 이름

        self.age = 세

패배 (자기) :

인쇄 ( "% s 님이 먹고 ..."%의 self.name)

defsleep (자기) :

인쇄 ( "% s이 (가) 자고 ..."%의 self.name)

deftalk (자기) :

인쇄 ( "% s이 (가) 이야기 ..."%의 self.name)

classMan (사람들은) : # 클래스는 부모 클래스의 사람들을 상속

defmake_money (자기) :

인쇄 ( "% s의 돈을 만들고 ..."%의 self.name)

defsleep (자기) :

People.sleep (자기) 부모 클래스 메소드의 # 확장

인쇄 ( "사람이 자고 ...")

classWomen (사람) :

defshop (자기) :

인쇄는 ( "% s의 쇼핑입니다 ..."%의 self.name)

M1 = 남자 ( "잭", "20")

m1.eat ()

m1.make_money ()

m1.sleep ()

W1 = 여성 ( "에이미", "25")

w1.talk ()

w1.shop ()

# 결과 :

Jackiseating ...

돈을 Jackismaking ...

Jackissleeping ...

manissleeping ...

Amyistalking ...

Amyisshopping ...

도 4는 서브 클래스는 상위 클래스 생성자의 두 가지 방법을 재구성

#!는 / usr / 빈 / ENV 파이썬

# - * - 코딩 : UTF-8 - * -

# 저자 : ZhengzhengLiu

# 클래스 상속

#class 사람 : #의 클래식

classPeople (객체) : # 새로운 스타일의 클래스

def__init의 __ (자기, 이름, 나이) :

        self.name = 이름

        self.age = 세

패배 (자기) :

인쇄 ( "% s 님이 먹고 ..."%의 self.name)

defsleep (자기) :

인쇄 ( "% s이 (가) 자고 ..."%의 self.name)

deftalk (자기) :

인쇄 ( "% s이 (가) 이야기 ..."%의 self.name)

classMan (사람들은) : # 클래스는 부모 클래스의 사람들을 상속

def__init의 __ (자기, 이름, 나이, 돈) :

생성자의 #People .__ 초기화 __ (자기, 이름, 나이) # (방법 A) 재구성이 아닌 부모 클래스 속성을 추가

슈퍼 (남자, 자기) .__ 초기화 __ (이름, 나이) # (방법 2) 재구성 할 생성자 (뉴 클래스 작성) 슈퍼를 사용하여

        self.money = 돈

인쇄 ( "% s 님이 돈 %의 $"% (self.name, self.money))

defmake_money (자기) :

인쇄 ( "% s의 돈을 만들고 ..."%의 self.name)

defsleep (자기) :

People.sleep (자기) 부모 클래스 메소드의 # 확장

인쇄 ( "사람이 자고 ...")

classWomen (사람) :

defshop (자기) :

인쇄는 ( "% s의 쇼핑입니다 ..."%의 self.name)

M1 = 사람 ( "잭", "20", 10)

m1.eat ()

m1.make_money ()

m1.sleep ()

W1 = 여성 ( "에이미", "25")

w1.talk ()

w1.shop ()

# 결과 :

잭 money10의 $를

Jackiseating ...

돈을 Jackismaking ...

Jackissleeping ...

manissleeping ...

Amyistalking ...

Amyisshopping ...

5, 다중 상속

#!는 / usr / 빈 / ENV 파이썬

# - * - 코딩 : UTF-8 - * -

# 저자 : ZhengzhengLiu

# 클래스 상속

#class 사람 : #의 클래식

classPeople (객체) : # 새로운 스타일의 클래스

def__init의 __ (자기, 이름, 나이) :

        self.name = 이름

        self.age = 세

        self.friends = []

패배 (자기) :

인쇄 ( "% s 님이 먹고 ..."%의 self.name)

defsleep (자기) :

인쇄 ( "% s이 (가) 자고 ..."%의 self.name)

deftalk (자기) :

인쇄 ( "% s이 (가) 이야기 ..."%의 self.name)

classRelationship (객체) :

defmake_friends (자기, OBJ) :

인쇄 ( "% s 님이 %의과 친구를하고있다"% (self.name, obj.name))

        self.friends.append (OBJ)

classMan (사람, 관계) # 다중 상속

def__init의 __ (자기, 이름, 나이, 돈) :

생성자의 #People .__ 초기화 __ (자기, 이름, 나이) # (방법 A) 재구성이 아닌 부모 클래스 속성을 추가

슈퍼 (남자, 자기) .__ 초기화 __ (이름, 나이) # (방법 2) 재구성 할 생성자 (뉴 클래스 작성) 슈퍼를 사용하여

        self.money = 돈

인쇄 ( "% s 님이 돈 %의 $"% (self.name, self.money))

defmake_money (자기) :

인쇄 ( "% s의 돈을 만들고 ..."%의 self.name)

defsleep (자기) :

People.sleep (자기) 부모 클래스 메소드의 # 확장

인쇄 ( "사람이 자고 ...")

classWomen (사람, 관계) # 다중 상속

defshop (자기) :

인쇄는 ( "% s의 쇼핑입니다 ..."%의 self.name)

M1 = 사람 ( "잭", "20", 10)

W1 = 여성 ( "에이미", "25")

m1.make_friends (W1)

w1.name = "리우"

인쇄 (m1.friends)

# 결과 :

잭 money10의 $를

Jackismaking friendswithAmy

[<주요 __ __. 여성 개체 at0x0057FA30>]

6, 새로운 클래스와 클래식의 승계의 순서

#!는 / usr / 빈 / ENV 파이썬

# - * - 코딩 : UTF-8 - * -

# 저자 : ZhengzhengLiu

를 ClassA (객체) : # 새로운 스타일의 클래스

def__init의 __ (자기) :

인쇄 ( "A")

ClassB가 (A) :

def__init의 __ (자기) :

 

인쇄 ( "B")

classC (A) :

def__init의 __ (자기) :

인쇄 ( "C")

classD (B, C) :

def__init의 __ (자기) :

패스

#print ( "D")

OBJ = D ()

7, 상속 예 - 학교, 교사와 학생

#!는 / usr / 빈 / ENV 파이썬

# - * - 코딩 : UTF-8 - * -

# 저자 : ZhengzhengLiu

# 상속 인스턴스 (새 클래스) - 아날로그 학교, 교사와 학생

classSchool (객체) :

def__init의 __ (자기, 이름, ADDR) :

        self.name = 이름

        self.addr = ADDR

        self.students = []

        self.stuffs = []

defenroll (자기, stu_obj) : # 학생 등록

인쇄 ( "%의 학생 등록"%의 stu_obj.name)

        self.students.append (stu_obj)

defheir (자기, staff_obj) : # 교사를 고용

인쇄 (%의 staff_obj.name "교사에게 %의 고용")

        self.stuffs.append (staff_obj)

classSchoolMember (객체) :

def__init의 __ (자기, 이름, 연령, 성별) :

        self.name = 이름

        self.age = 세

        self.sex = 섹스

deftell (자기) :

패스

classTeacher (SchoolMember) :

def__init의 __ (자기, 이름, 나이, 성별, 급여, 과정) :

        슈퍼 (교사, 자기) .__ 초기화 __ (이름, 나이, 성별)

        self.salary = 급여

        self.course = 물론

deftell (자기) :

인쇄('''

        ----- 교사의 정보 : % s에 -----

        이름 : %의

        나이 : %의

        성별 : %의

        급여 : % s의

        행동

        ''% '를 (self.name, self.name, self.age, self.sex, self.salary, self.course))

defteach (자기) :

인쇄 (% "% s 님이 과정을 [% s]을 (를) 가르치고있다"(self.name, self.course))

classStudent (SchoolMember) :

def__init의 __ (자기, 이름, 나이, 성별, stu_id 학년) :

        슈퍼 (학생, 자기) .__ 초기화 __ (이름, 나이, 성별)

        self.stu_id = stu_id

        self.grade = 등급

deftell (자기) :

인쇄('''

        ----- 학생의 정보 : % s에 -----

        이름 : %의

        나이 : %의

        성별 : %의

        Stu_id %의

        학년 : %의

        ''% '를 (self.name, self.name, self.age, self.sex, self.stu_id, self.grade))

defpay_tuition (자기, 금액) :

인쇄 (양 % (self.name "% s이 (가) $의 %의 수업료를 paied있다"))

# 인스턴스화

학교 = 학교 ( "청화", "베이징")

T1 = 교사 ( "잭", "30", "M", "20000", "파이썬")

T2 = 교사 ( "에이미", "28", "F", "15000", "리눅스")

S1 = 학생 ( "류", "23", "M", "1701", "파이썬")

(S2) = 학생 ( "왕", "25", "F", "1702", "리눅스")

# 표시 정보 호출 학생과 교사

t1.tell ()

s1.tell ()

school.heir (T1) #의 T1 대여 교사

school.enroll (S1) #의 S1 학생 등록

school.enroll (S2)

인쇄 (school.stuffs)

인쇄 (school.students)

# 먼저 교사가 가르치는 고용

school.stuffs [0] .teach ()

forstuinschool.students :

stu.pay_tuition (5000)

# 결과 :

        ----- 교사의 정보 : 잭 -----

        이름 : 잭

나이 : 30

        성별 : M

급여 : 20000

        코스 : 파이썬

 

        ----- 학생의 정보 : 리우 -----

        이름 : 리우

나이 : 23

        성별 : M

Stu_id : 1701

        학년 : 파이썬

 

교사들은 잭을 고용

등록 리우 학생

등록 왕의 학생

[<주요 __ __. 교사 오브젝트 at0x0059FDB0>]

[<주요 __ __. 학생 오브젝트 at0x0059FDF0>, <주요 __ __. 학생 오브젝트 at0x0059FE10>]

과정을 Jackisteaching [파이썬]

리우는 $ 5000 tuitionfor paied있다

왕은 $ 5000 tuitionfor paied있다

8, 다형성 (polymorphisn) - 인터페이스, 다양한 형태의

(1) 정의

상위 객체가 하나 또는 그 하위 객체 기술의 더 동일하게 설정할 수 있습니다 다형성 (polymorphisn)

이 할당 한 후, 부모 객체는 자식 개체에 할당 된 전류의 특성에 따라 다른 방식으로 작동 할 수 있습니다.

간단하게 한 문장으로 넣어 : 부모 클래스 형 포인터로 서브 클래스 형 포인터의 할당을 할 수 있습니다.

다형성의 역할 : 우리는 패키지 구현 세부 사항, 모듈 형 코드를 숨길 수 있습니다 알고 상속 확산 코드 모듈 (들) 존재, 그 목적은이다 - 코드 재사용.

인터페이스 재사용 - 다형 달성하기 위해 또 다른 목적! 다형성의 역할은 클래스 상속과 파생 시간이며, 확인 올바른 호출 그 때 클래스의 인스턴스의 속성 "가계도."

Pyhon 많은 다형성 구문이 같은 분류 LEN (), ()로 지원됩니다, 당신은리스트의 전송 거리의 목록을 반환, 렌에 문자열이 문자열의 길이를 반환 전달합니다.

(2) 샘플 코드 :

#!는 / usr / 빈 / ENV 파이썬

# - * - 코딩 : UTF-8 - * -

# 저자 : ZhengzhengLiu

classAnimal (객체) :

def__init의 __ (자기 이름) :

        self.name = 이름

deftalk (자기) :

raiseNotImplementedError ( "서브 클래스는 추상 메소드를 구현해야합니다")

다형성 번호 - 인터페이스, 다양한 형태

    @staticmethod

defanimal_talk (OBJ) :

        obj.talk ()

classCat (동물) :

deftalk (자기) :

인쇄 ( "%의 야옹!"%의 self.name)

classDog (동물) :

deftalk (자기) :

인쇄 ( "%의 우와! 우와!"%의 self.name)

D = 개 ( "A")

#의 d.talk ()

C = 고양이 ( "B")

#의 c.talk ()

# 다형성

Animal.animal_talk (d)

Animal.animal_talk (c)

# 결과 :

워더! 씨!

B 야옹!

9, 무기 객체 지향 설계 - 도메인 모델링

(1) 정의

도메인 모델의 처음부터 우리가 시작 분석 및 설계 과정을 객체 지향, 우리는 요구 사항 분석은 객체 지향 설계를 해소하기 위해에서 도메인 모델이 완료되면 말할 수있다.

도메인 모델은 정의에 관련된 모델링 요구 사항의 필드, 인수가 더 인기있는 비즈니스 모델이다.

(2) 도메인 모델은 두 가지 기능을 갖는다 :

중요한 개념 사업을 탐험

비즈니스의 개념 사이의 관계를 설정

(3) 세 문자 필드 모델링

도메인 모델은 또한 분석 및 정제를 포함, 도메인 모델링 접근 대한 요약은 작업 기간을 찾을 심지어 간단한! "명사를 찾기 위해"입니다 매우 중요, 간단하게 할 수 골라보다는,

이 경우, 분석가 및 디자이너는 경험과 기술을 유용하게 사용할 수 있습니다. 그러나 분석은 또한 도메인 모델은 적어도 가능한 도메인 모델을 완료, 심지어 경험과 뛰어난 기술의 풍부한하지 않고, 비교적 간단한다.

핵심 질문 : 분야이기 때문에 모델을 찾기 위해 "수요가 객체 지향하는 다리"를 생각할 수 있습니다 :? 수요 모델에서 찾고, 구체적으로는 사용 사례에서 찾을 수 있습니다.

요약 : 도메인 모델링 접근 방식은 "사용 사례에서 명사를 찾을 수 있습니다."하는 것입니다 물론, 명사를 찾은 후, 순서대로 객체 지향 요구 사항과 특성 일관성을합니다.

우리는 또한,이 다음 단계 더 이러한 용어 개선해야 속성을 추가, 심지어 관계를!

명사를 찾아 속성도 관계를 추가 : 마지막으로, 우리는 세 개의 문자 도메인 모델링 방법이 있다고 결론 지었다. 



추천

출처www.cnblogs.com/waterstar/p/11320903.html