Pythonオブジェクト向け設計

11044 ワード

一、対象思想
1.対象思想設計
哲学的観点に基づく:万物はすべて対象である
例:
ケース1:鶏が食べたい
プロシージャ向けオブジェクト向け
1.自分で野菜を買いに行きます.一人に料理を頼む
2.自分で料理を選ぶ.一人に料理の選び方を頼む
3.自分で料理を作る.一人のコックに料理を頼む
4.自分で食べる.自分で食べる
ケース2:明ちゃんはパソコンのシロで、パソコンを配置したいです.
プロシージャ向けオブジェクト向け
1.明ちゃんはパソコンの知識を補充します.パソコンの分かる人に部品を頼む
2.明ちゃんは部品を買いに行きます.ひとり組み立てを依頼する
3.明ちゃんは部品を運んできた.明ちゃんはゲームを始めました.
4.明ちゃん組立
5.明ちゃんがゲームを始める
ケース3:赤いファラリーが京蔵高速を走っている
フェラーリ京蔵高速
プロセス向け:犬が糞を食べるオブジェクト向け:犬の糞を食べる
プロセス向け:卵チャーハンオブジェクト向け:丼
2.プロセス向けとオブジェクト向けの違い
2.1プロセス向け
プロセス:処理
ライフケース:
問題を見る考え方で、問題を解決する時、問題がどのように一歩一歩解決されたのかに重点を置いて、それから親力で解決します.
プログラム内:
コードを上から順に実行
各モジュール間の関係は可能な限り独立しており,importの場合もロードの順序は上から順にロードされる.
各モジュールの文構造:順序、ブランチ、ループ
2.2オブジェクト向け
ライフケース:
問題を見る考え方で、特殊な機能を持つ個体を見つけることに重点を置いて、その個体に何かを完成させるように依頼します.この個体は対象と呼ばれています.
メリット:複雑な問題を単純化し、プログラマーを実行者から指揮者に変えることができます.
プログラム内:
必要に応じてコードを実行する【コードの実行順序が一定ではない】
プログラムの流れは完全に需要によって決まる【対象】
思想:オブジェクトが存在する場合は、直接使用します.オブジェクトが存在しない場合は、オブジェクトを作成します.
注意:オブジェクト向けは単なる考え方であり、プログラミング言語ではありません.
Pythonはオブジェクト向けのプログラミング言語であり、クラスとオブジェクトはオブジェクト向けの核心である.
  :     (   smell、   lick、   bite)
                    

     :      ,       ,        (    ) 
     :         ,         ,        ,        .      (     ,     )

二、類と対象【把握】
1.クラスとオブジェクトの概念
クラス:特殊な機能を持つ複数の個体の集合
オブジェクト:クラスの中で、特殊な機能を持つ個体が、特定のことを解決するのに役立つインスタンス【instance】とも呼ばれます.
両者の関係:クラスはあるクラスのオブジェクトの共通の特徴を記述するために使用され、オブジェクトはクラスの具体的な存在である【関係を含む】
思考問題:先に類があるのか、それとも先に対象があるのか.
【言いにくいですが、プログラムで使用する場合、クラスを定義してからオブジェクトを作成するのが一般的です】
例:
クラスオブジェクト
人王麻子、李四、ニコラス.趙四...
速达韵达、中通、円通...
SupreHeroバットマン、スパイダーマン、アメリカのキャプテン、豚豚侠..
クラスは実は1种のデータ型で、ただ普通の情况の下でカスタマイズしたので、クラスをカスタマイズしたデータ型だと考えることができて、用法と整型、string、listなどは基本的に同じ【定义の変数、伝参】
2.クラスの定義
構文:
classクラス名():
クラス
説明:
a.Pythonにおけるclassキーワード定義クラスの使用
b.クラス名は合法的な識別子であればよいが、アルパカの命名法則【頭単語の頭文字が大文字で、異なる単語の間で頭文字が大文字である】に従うことが要求される.
c.クラスをインデントで区別する
d.クラス体は一般的に2つの部分の内容を含む:クラスの特徴の説明、クラスの行為の説明
コードのデモ:
#    
#    
class MyClass():
    #    
    #  
    #print("hello")   #        
    pass

#  :    py            ,  ,          ,       ,          
class MyClass1():
    pass

3.類の設計【類体の実現】
3つの要素:
事物名称【類名】:例:人
物事の特徴【変数】:名詞、例:氏名、年齢...
物事の行为【関数/方法】:动词,例:食べる、走る...
三、類の中の方法と変数【把握】
1.クラス内のメソッドと変数の定義
クラスの中の方法と変数は物事の行為と特徴を説明するためです
クラスで定義されたメソッドをメンバーメソッドと呼びます
クラスで定義された変数はメンバー変数と呼ばれ、属性[os.name]とも呼ばれます.
メンバー変数:クラスが持つフィーチャー
メンバーメソッド:クラスが持つ動作
クラスの存在の意味:同じ特徴と動作を持つオブジェクトは、特定のオブジェクトを作成するためにクラスを抽出できます.
コードのデモ:
#   
#1.     :  
class Person():
    #2.     :    、  
    name = ""
    age = 0
    height = 0.0

    #3.     :    【  】
    #  :              :        self,    self           
    #       ,self      
    #    ,                   ,                ,     

    #  :self:  ,      【  】
    #   self         ,              ,     self
    def eat(self,food):
        print("eating",food)
    def run(self):
        print("running")

2.クラスでのメソッドと属性の使用
2.1オブジェクトの作成【インスタンス化されたオブジェクト】
既知のクラス、クラスによるオブジェクトの作成
オブジェクトの作成プロセスオブジェクトのインスタンス化プロセス
構文:変数名=値
オブジェクト名=クラス名()
コードのデモ:
#   
#1.     :  
class Person():
    #2.     :    、  
    name = ""
    age = 0
    height = 0.0

    #3.     :    【  】
    #  :              :        self,    self           
    #       ,self      
    #    ,                   ,                ,     

    #  :self:  ,      【  】
    #   self         ,              ,     self
    def eat(self,food):
        print("eating",food)
    def run(self):
        print("running")
        print("self   :", id(self))


#     
p1 = Person()
print(p1)

p2 = Person()
print(p2)

#p1 p2     ,   ,  ,        
#p1 p2          ,              

#                       
#1.    
#  :  .   
#  :  .   =  
per = Person()
print(per.name)
per.name = "   "
print(per.name)
per.age = 18
print(per.age)
per.height = 1.70
print(per.height)

#2.    
#  :  .   (    )
#  :self      ,              【    ,     ,     】
per.run()
print("per   :",id(per))
"""
self   : 2687721120880
per   : 2687721120880
"""
per.eat("apple")

person = Person()
person.name = "  "
person.age = 20
print(person.name,person.age)
person.run()
person.eat("")

#  :                      

まとめ:
アクセス変数は、オブジェクト名を使用します.属性名
アクセス方法:オブジェクト名.メソッド名(パラメータリスト)
3.メモリ内のオブジェクト
per = Person()
説明:
a.プログラムで定義されたPersonタイプの変数perは、実際にはスタックメモリに格納され、実際のPersonオブジェクトを指し、実際のPersonオブジェクトはスタックメモリに格納される変数名である.
b.クラスのメンバー変数は、オブジェクトの出現に伴って現れ、オブジェクトの消失に伴って消える
c.各オブジェクトのメンバー変数は、スタック空間に独自の空間を開き、互いに影響を及ぼさない
4.ダイナミックバインド属性と制限バインド
__slots__     :           【         ,            】
  :__slots__ = (     )

コードのデモ:
#1.    
class MyClass():
    #2.    
    """
    num1 = 0
    num2 = 10
    """
    #    
    #  :                          
    __slots__ = ("num1","num2")

    #3.    
    def fun1(self):
        print("fun1")
    def fun2(self,num):
        print(num)

#4.    
my = MyClass()
#5.         
my.num1 = 11
my.num2 = 22
print(my.num1,my.num2)

#6.         
my.fun1()
my.fun2(30)

#               
#       【Python       】
my.n = 100
print(my.n)

my1 = MyClass()
#print(my1.n)

5.総合ケース1
コードのデモ:
practiceDemo01.pyファイル【テストモジュール】
"""
  :                 
   ,      ,  ,         
      ,  ,  ,       
"""
"""
  :
   
      :  
      :        

   
      :  ,  ,  
      :      
"""
#  
"""
import  practice01.teacher
import  practice01.student
"""
from practice01.teacher import  Teacher
from practice01.student import Student

#1.         
wang = Teacher()
wang.name = "   "

#2.         
xiaohua = Student()
xiaohua.name = "  "
xiaohua.age = 18
xiaohua.hobby = "  "

#3.          
wang.letStudentIntroduce(wang.name,xiaohua)   #stu = xiaohua

xiaoli = Student()
xiaoli.name = "  "
xiaoli.age = 20
xiaoli.hobby = "  "
wang.letStudentIntroduce(wang.name,xiaoli)

xiaoming = Student()
xiaoming.name = "  "
xiaoming.age = 25
xiaoming.hobby = "   "
wang.letStudentIntroduce(wang.name,xiaoming)

teacher.pyファイル【エンティティークラス】
#   
class Teacher():
    #  :    
    name = ""

    #  :    
    def letStudentIntroduce(self,name,stu):
        #      
        print(name + " " + stu.name + "     ")

        #    
        stu.introduce(stu.name,stu.age,stu.hobby)

        #            
        if stu.name == "  ":
            stu.singSong()
        elif stu.name == "  ":
            stu.dance()
        else:
            stu.lie()

student.pyファイル【エンティティークラス】
#   
class Student():
    #  :    
    name = ""
    age = 0
    hobby = ""

    #  :    
    def introduce(self,name,age,hobby):
        print("   ,  %s,  %d,  %s"%(name,age,hobby))

    #  
    def singSong(self):
        print("  ~  ")

    #  
    def dance(self):
        print("   ")

    #   
    def lie(self):
        print("     ,       ")

四、構造関数と構造解析関数
1.コンストラクション関数【把握】
           【         】,                  
__init__:    【  :    ,            】
    :   
     :           ,           
per = Person()

  :
  def __init__(self,args1,args2....)
         
  :
  a.              __init__  ,                  
  b.args1,args2...                

コードのデモ:
#1.          
class Check():
    num1 = 0
    str1 = ""

    #    
    def __init__(self):
        print("jfahj")

    def show(self):
        print("show")
#  :        ,                 
c = Check()
c.show()

#2.         
class Check1():
    name = ""
    age = 0
    """
    def __init__(self,n,a):
        print("fajkgak")
    """
    #  2:          ,       ,        , Python      :       
    #  3:Python ,             
    def __init__(self, *n):
        print("fajkgak")


#  1:                ,              
c1 = Check1()
c11 = Check1("fsiugh")

#3.         
class Check2():
    name = ""
    age = 0

    #         :       
    def __init__(self,n,a):
       print(n,a)
       name = n
       age = a

#  1:                ,              
c2 = Check2("zhangsan",10)
print(c2.name,c2.age)   #0


#4.self   
class Check3():
    name = ""
    age = 0

    #         :       
    def __init__(self,n,a):
       print(n,a)
       #self   :  self            ,  self.name  name       【    】
       self.name = n
       self.age = a

c3 = Check3("zhangsan",10)
print(c3.name,c3.age)  #10

#5.  self  ,           【  】
#self       ,           
class Check4():

    #         :       
    def __init__(self,name,age):
       print(name,age)
       #self   :  self            ,  self.name  name       【    】
       self.name = name
       self.age = age

    def show(self):
        print("showing")

c4 = Check4("lisi",20)
print(c4.name,c4.age)
c4.show()

2.構造関数
         ,                ,       
__del__:

    :   del     ,             

    :    ,       ,     

コードのデモ:
import  time

class Pig():
    def __init__(self,name,age):
        self.name  = name
        self.age = age
        print("       ")


    def show(self):
        print("show")

    #    
    def __del__(self):
        print("~       ")


#          :1:              2:  del    
p = Pig("abc",10)

del p

#  :             【             】
#print(p.age)

time.sleep(5)

#         ,           ,               
#          
def func():
    per2 = Person("aa", 1, 1, 1)

func()

3.総合ケース2
practiceDemo02.pyファイル【テストモジュール】
"""
  :          ,            

    
  :  
  :  ,  

   
  :  ,  
  :  
"""
#    
from  practice02.car import Car
from practice02.richMan import RichMan

#1.          
wang = RichMan("   ")

#2.         
c = Car("    ","   ")
c.run()

#3.           
wang.driveCar(c)
wang.showCar(c)

richMan.pyファイル【エンティティークラス】
class RichMan():
    #    
    def __init__(self,name):
        self.name = name

    #    
    def driveCar(self,car):
        print("   %s      %s"%(self.name,car.brand))
    def showCar(self,car):
        print(car.brand,car.color)

car.pyファイル【エンティティークラス】
class Car():
    #    
    def __init__(self,brand,color):
        self.brand = brand
        self.color = color

    #    
    def run(self):
        print("%s      "%(self.brand))