オブジェクト向けプログラミングコードの詳細(依存関係、関連関係、組合せ関係)

4983 ワード

オブジェクト向けプログラミング
オブジェクト向けプログラミング
Oop変プログラミングはクラスとオブジェクトを利用して様々なモデルを作成する実世界の記述を実現するものであり、オブジェクト向けプログラミングを使用する理由は、プログラムのメンテナンスと拡張をより簡単にすることができるからである.
クラス
一つのクラスは同じ属性のオブジェクト、青写真、プロトタイプです.簡単に言えばテンプレートです.
Objectオブジェクト
対象は実体人犬大戦中の人と犬が対象
テンプレートを割り当てて呼び出すことで生成されるエンティティは、インスタンス化されます.
Inheritance継承
1つのクラスは子クラスを派生することができ、この親クラスで定義された属性、方法は自動的にクラスに継承されます.
Encapsulationパッケージ
クラスの中でデータに対して値を割り当てて、内部の呼び出しは外部のユーザーに対して透明で、これはクラスをカプセルあるいは容器に変えて、中にクラスのデータと方法を含んでいます.
プロセス向けプログラミング
プログラムは上から倒れて一歩一歩実行し、一歩一歩上から下へ、最初から最後まで問題を解決する.
プロセス向けの例:Webサイトのログを分析し、メールレポートを生成するには、次の手順に分ける必要があります.
  • は、複数のウェブサイトサーバが同時に対外的にサービスを提供するため、各サーバにログを収集する.
  • ログの様々な次元の分析を行います.例えば、pv、uv、ソース、アクセスするデバイスなど
  • です.
  • レポート生成、メール送信
  • オブジェクト向けvsプロセス向けまとめ
    プロセス向けの利点:書き込みの複雑さを大幅に低減し、実行手順に従ってデマを積み重ねさえすればよい.
    欠点は:1セットの流水線あるいは流れは1つの問題を解決するために用いて、コードの前に全身を発動します
    オブジェクト向けの利点:プログラムの拡張性を解決し、あるオブジェクトを個別に修正すると、ゲーム内のタスクパラメータの特徴やスキルの修正など、システム全体にすぐに反映されます.
    欠点:制御性が悪く、プロセス向けのプログラムに流水線式の正確な問題の処理フローと結果を設計することができない.
     
    クラスの基本構文
    class Dog:
        dog_type = "jingba"  #  ,   ,      ,    ,         
        hp = "100"
    
        def __init__(self,name,age):   #      ,     ,               ,       
            print('haha',name,age)
            #   name,age   ,        .            
            self.name = name
            self.age = age
    
        def sayhi(self):    #  ,        self , self      
            print("hello ,i  am a dog ,my type is %s"%self.dog_type,self.name,self.age)
    
    
    d1 = Dog("xdd",2)   #        
    d2 = Dog('jack',3)
    
    d1.sayhi()
    d2.sayhi()
    
    print(d1.dog_type)

    Selfはインスタンス自体を表します
    属性参照     クラス属性は共有属性に属し、インスタンス属性はプライベート属性に属する
    クラスの共通属性参照 ==> クラス名
    インスタンス属性の参照=>d.name
     
    クラス間の依存関係
    # -*- coding:utf-8 -*-
    class Dog:
    
        def __init__(self,name,age,breed,master):
            self.name = name
            self.age = age
            self.breed = breed
            self.master = master
        def depends(self):
            print("hi ,i am %s, i am %s years old,my breed is %s my master is %s"%(self.name,self.age,self.breed,self.master))
    
    
    class People:
    
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def lugou(self,dog):
            print("i want liugou %s"%dog.name)
    
    p = People("jack",20)
    d = Dog("xdd",2,"jingba",p.name)
    
    d.depends()

    オブジェクト間の関連付け
    # -*- coding:utf-8 -*-
    class Relationship:  #     couple       
        def __init__(self):
            self.couple = []
    
        def make_couple(self, obj1, obj2):
            self.couple = [obj1, obj2]
            print("%s and %s is couple" % (obj1.name, obj2.name))
    
        def get_my_parter(self, obj):
            # print("find %s de couple"%obj.name)
            for i in self.couple:
                if i != obj:
                    return i
            else:
                print("alone dog")
        def break_up(self):
            print("%s and %s break up"%(self.couple[0].name,self.couple[1].name))
            self.couple = []  #   
    
    class Person:
        def __init__(self, name, age, sex, relation):
            self.name = name
            self.age = age
            self.sex = sex
            self.relation = relation
            # self.parter = None  #        
    
        def do(self):
            pass
    
    
    make_cp = Relationship()
    
    p1 = Person("xdd", 22, 'Man', make_cp)
    p2 = Person("dogs", 23, "Woamn", make_cp)
    
    make_cp.make_couple(p1, p2) #    
    
    #     ,  
    p1.parter = p2
    p2.parter = p1
    
    print(p1.parter.name, p2.parter.name)#       
    
    print(p1.relation.get_my_parter(p1).name)  # p1   
    
    p1.relation.break_up()#   
    
    p2.relation.get_my_parter(p2)#     

    オブジェクト間の結合関係
    # -*- coding:utf-8 -*-
    #                   ,      ,        ,            
    class Dog:
    
        hp = 100
    
        def __init__(self,name,breed,attack_val):
            self.name = name
            self.breed = breed
            self.attack_val = attack_val
    
        def dog_bite(self,person):
            person.hp -= self.attack_val
            print("Dog [%s] bite person [%s] ,person hp - [%s],hp is [%s]"%(self.name,person.name,self.attack_val,person.hp))
    
    
    class Weapon:  #  
    
        def dog_stick(self,obj):
            self.name = "   "
            self.attackval = 30
            obj.hp -= self.attackval
            self.print_log(obj)
    
        def print_log(self,obj):
            print("[%s] bei [%s] attack ,- hp [%s],hp is [%s]"%(obj.name,self.name,self.attackval,obj.hp))
    
    class Person:
        hp = 100
    
        def __init__(self,name,age):
            self.name = name
            self.age = age
            self.weapon = Weapon()
            #self.attack_val = attack_val
    
        # def person_beat(self,dog):
        #     dog.hp -= self.attack_val
        #     print("People [%s] beat Dog [%s], Dog - hp [%s],Dog hp is [%s]"%(self.name,dog.name,self.attack_val,dog.hp))
    
    d = Dog("dogs","erha",30)
    p = Person("xdd",12)
    d.dog_bite(p)
    p.weapon.dog_stick(d)