オブジェクト指向プログラミングの設計と開発 - はじめに

オブジェクト指向の起源

詳細については、こちらの記事を参照してください。

私たちは、それを必要とする理由オブジェクト指向プログラミングとされます

プロセス指向設計

コンセプト

コアプロセスは、単語であるプロセス指向の設計が優れてうまく設計されたよりも、組み立てラインのようなものです......行い、その後、やってすることで問題を解決するためのプロセスステップを指し、思考の機械的な方法です。プログラムの先頭には大きな問題に取り組むのであれば、プロセス指向の基本的なデザインのアイデアは、多くの小さな問題やサブプロセスには、この大きな問題であり、これらのサブプロセスは、小さな問題が十分になるまで実施する過程で分解し続けます範囲内の小さなステップで解決するのは簡単。

利点

プロセスの問題の複雑さ、さらに簡素化(達成小さなステップを達成するための小さな一歩に複雑な問題は、非常に簡単になります)

短所

パイプラインやプロセスは、自動車組立ラインの清涼飲料の生産を生産する、問題を解決するために使用されている、でも、彼らは大きな変化を持つことができ、コンポーネントを変更、確かに全身、スケーラビリティの貧しい人々に影響を与えることができません。

シナリオ

めったにシーンを変更する必要はありません達成いったんプロセス指向プログラミングのアイデアは、一般的にそれらの機能のために使用されています。あなただけのいくつかのワンタイムタスクを実行するために、簡単なスクリプトを記述する場合、プロセス指向の方法で優れています。シーンの基本ほとんど変化したら、よく知られた例は、などのLinuxカーネル、gitの、およびApache HTTP Serverは、ですが、あなたが処理したい場合、タスクは複雑であり、一定の反復やメンテナンスを必要とし、とあったこと面向对象、最も便利。

オブジェクト指向プログラミング

コンセプト

コアは、すべてのものは、すべてのオブジェクトが、神が存在しない世界の目で作成することができる存在している、オブジェクトは神として自分自身を考える必要があります理由を理解するために(、単語の目的である。オブジェクト指向など西に良いデザインの旅のようなプログラミング、解決すべき如来の問題は東大唐ランド、如来はこの問題を解決すると思った本を通過させることである4人を必要とする:僧侶、沙シャン、豚、猿の王、誰もがコンセプトの目的である、独自の特性やスキルを(持っています機能や技能オブジェクトのプロパティのデータ属性とメソッドに対応)が、これは楽しみではない、如来はまた、旅行中4 Gaosiを指導防ぐために、そして護衛神々のグループを配置するためには、悪魔のグループを配置して、これらのオブジェクトは、最終的になるまで行わと対話四人の神と悪魔の指導、学習し始め聖書。如来は、オブジェクトが特徴とスキルの組み合わせでどのようなプロセス)に応じて、4本のチューブを指導拾うではないでしょう、に基づいオブジェクト指向設計プロセスが世界を作るようなものです、あなたはこの世界の神です、すべてがあります また、現実世界のオブジェクト指向シミュレーションへの思考プロセス指向の機械、給与より多くの注意とは対照的に、そこに作成することができ、それは思考の「神」タイプです。

利点

低膨張プログラムの問題を解決します。ソフトウェアの品質のために、オブジェクト指向プログラミングは、それらのすべてを表していないことを強調しておきます。オブジェクト指向プログラミングは、スケーラビリティの問題を解決するために使用されます。

ソフトウェアの品質特性

短所

1、プログラミングプロセス指向の複雑さよりもはるかに高いが、それはすぐに過剰に設計の問題に非常になりやすい、設計プロセスに基づいて開始したオブジェクト指向と理解していません。オブジェクト指向プログラミングを使用してシーンを招待いくつかの低スケーラビリティの要件は、シェルスクリプトのLinux管理システムは、設計、プロセス指向が、より適しへの使用オブジェクトに適していないような、より困難になります。
図2は、パイプライン化されたデザインは、プロセスを扱う非常に正確な予測問題になることができますし、オブジェクト間の相互作用に起因する問題を解決するために開始すると、プロセス指向プログラミング、オブジェクト指向プログラミングの結果が、でも神は正確に最終的な結果を予測することはできませんすることはできません。私たちは、多くの場合、非常に簡単に戦闘中に発生し、ナイフが死に3人をハッキングし、この状況が正確に予測できないアーケードゲーム、新しいゲームのキャラクター、殷Paのスキルを参照して、オブジェクト間の相互作用のみを正確にすることができ最終的な結果を知っています。

シナリオ

常にソフトウェアのニーズの変化、一般的な需要の変化は、など、ユーザー層、インターネットアプリケーション、エンタープライズソフトウェア、ゲーム、のために良い場所に集中している彼らの才能オブジェクト指向プログラミングがすべてではありません表示するには、オブジェクト指向プログラミングされています。ソフトウェアの品質に関しては、オブジェクト指向プログラミングは唯一のスケーラビリティを解決するために使用されます。

オブジェクト指向設計を使用した機能

機能OOD

#方案一
def dog(name,gender,type):
    # 狗的动作
    def jiao(dog):
        print('一条狗[%s],汪汪汪' % dog['name'])
    def chi_shi(dog):
        print('一条[%s] 正在吃屎' % dog['type'])
    #狗的特征
    dog1 = {
        'name':name,
        'gender': gender,
        'type': type,
        'jiao':jiao,
        'chi_shi':chi_shi,
    }
    return dog1
d1=dog('wj','母','中华田园犬')
d2=dog('qf','公','藏敖')
print(d1)
print(d2)
d1['jiao'](d1)
d2['chi_shi'](d2)

#方案二(改进)
def dog(name,gender,type):
    # 狗的动作
    def jiao(dog):
        print('一条狗[%s],汪汪汪' % dog['name'])
    def chi_shi(dog):
        print('一条[%s] 正在吃屎' % dog['type'])
    def init(name,gender,type):
        dog1 = {
            'name':name,
            'gender': gender,
            'type': type,
            'jiao':jiao,
            'chi_shi':chi_shi,
        }
        return dog1
    return init(name,gender,type)

d1=dog('wj','母','中华田园犬')
d2=dog('qf','公','藏敖')
print(d1)
print(d2)
d1['jiao'](d1)
d2['chi_shi'](d2)

オブジェクト指向設計の実践

def school(name,addr,type):
    def init(name, addr, type):
        sch = {
            'name': name,
            'addr': addr,
            'type': type,
            'kao_shi': kao_shi,
            'zhao_sheng': zhao_sheng,
        }
        return sch
    def kao_shi(school):
        print('%s 学校正在考试' %school['name'])
    def zhao_sheng(school):
        print('%s %s 正在招生' %(school['type'],school['name']))
    return  init(name,addr,type)

s1=school('文天','郑蒲岗','公立学校')
print(s1)
print(s1['name'])

s1['zhao_sheng'](s1)

s2=school('清华','北京','公立学校')

print(s2)
print(s2['name'],s2['addr'],s2['type'])
s2['zhao_sheng'](s2)

Objectクラス(クラスオブジェクト指向設計を使用して)

クラスとオブジェクトの概念

カテゴリーは、我々は、オブジェクトが特徴とスキルの組み合わせですから学ぶ前に、カテゴリ、タイプ、オブジェクト指向設計が最も重要な概念であり、カテゴリは、類似した一連のオブジェクトであるとスキルの組み合わせを提供しています。

そこで問題は、(例えば、特定の人物の存在など)オブジェクトの具体的な存在を持っていることですか?それは最初のコンセプトだったのでしょうか?この問題は2例を見てする必要があります

現実の世界では:確かに、その後、第一の目的とは、クラスを持っています

世界は、人類の文明の発展に伴い、人間異なる視点は、あること、など人の人間、動物、植物、の概念など、さまざまなカテゴリを、まとめ、実際に存在する物体の様々なことは確かですクラスは唯一の概念でありながら、オブジェクトが、具体的な存在であると述べ、本物ではなかった、たとえば、あなたは、ヒト個体を参照するものを私に伝えることはできません。

必ずオブジェクトを生成した後、クラスを定義します。プログラムで

関数が呼び出されると、最初に定義された機能:この機能は使用に類似しています。
クラスを定義するためのプログラムを必要としている:クラスは同じです。クラスを呼び出した後。
同じではありません:関数呼び出しは関数本体のコードを実行し、関数本体の実行結果を返します。クラスは、オブジェクトが返され、オブジェクトを呼び出す必要があります。

クラス(実世界では、世界のプログラム)を定義

上記の手順に従ってください、私たちは(あなたのすべては学生です、私たちはビューの学校の点に立って)クラスを定義します

現実の世界では:確かに、その後、第一の目的とは、クラスを持っています

現実の世界では、学校のテキスト角度の日に立っ:最初、オブジェクトをし、クラスを持っています

実際のオブジェクト

对象1:李易峰
    特征:
        学校=文天
        姓名=李易峰
        性别=男
        年龄=23
    技能:
        学习
        吃饭
        睡觉

对象2:勇虹王者
    特征:
        学校=文天
        姓名=勇虹王者
        性别=男
        年龄=28
    技能:
        学习
        吃饭
        睡觉

对象3:秋名山
    特征:
        学校=文天
        姓名=秋名山
        性别=男
        年龄=18
    技能:
        学习
        吃饭
        睡觉

クラスの現実

现实中的学生类
    相似的特征:
        学校=文天
    相似的技能:
        学习
        吃饭
        睡觉

プログラムで:必ず(オブジェクトを生成するための)(複数可)、クラスの使用を定義します

Pythonプログラムではclass关键字定義し、プログラム中特征での变量アイデンティティ、技能函数アイデンティティ、クラスので、最も一般的なのは、単純である:变量函数定義。

クラスのプログラム

class WentianStudent:
    school='文天'
    def learn(self):
        print('is learning')
        
    def eat(self):
        print('is eating')
    
    def sleep(self):
        print('is sleeping')

#注意
#1.类中可以有任意python代码,这些代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过WentianStudent.__dict__查看
#2.类中定义的名字,都是类的属性,点是访问属性的语法
#3.对于经典类来说我们可以通过该字典操作类名称空间的名字(新式类有限制),但python为我们提供专门的语法

プログラム内のオブジェクト

クラス、またはと呼ばれるインスタンス化を呼び出すと、オブジェクトが取得します

s1=WentianStudent()
s2=WentianStudent()
s3=WentianStudent()

#如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__

'''
__init__方法:
            __init__方法是在对象产生之后才会执行,只用来为对象进行初始化操作
            可以有任意代码,但一定不能有返回值(可以返回None,但是没有意义)
'''

class WentianStudent:
    ......
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    ......


#先调用类产生空对象s1,然后调用OldboyStudent.__init__(s1,'李易峰','男',23)
s1=WentianStudent('李易峰','男',23) 

s2=WentianStudent('勇虹王者','男',28)
s3=WentianStudent('秋名山','男',18)

使用法プログラムのクラスとオブジェクト

使用法クラスプログラム

.:专门用来访问属性,本质操作的就是__dict__
WentianStudent.school #等于经典类的操作WentianStudent.__dict__['school']
WentianStudent.school='文天' #等于经典类的操作WentianStudent.__dict__['school']='文天'
WentianStudent.x=1 #等于经典类的操作WentianStudent.__dict__['x']=1
del WentianStudent.x #等于经典类的操作WentianStudent.__dict__.pop('x')

使用法オブジェクトプログラム

#执行__init__,s1.name='秋名山',很明显也会产生对象的名称空间
s2.__dict__
{'name': '勇虹王者', 'age': '男', 'sex': 28}

s2.name #s2.__dict__['name']
s2.name='勇虹王者' #s2.__dict__['name']='勇虹王者'
s2.course='python' #s2.__dict__['course']='python'
del s2.course #s2.__dict__.pop('course')

初期化方法の詳細な説明__init__

#方式一、为对象初始化自己独有的特征
class People:
    country='China'
    x=1
    def run(self):
        print('----->', self)

# 实例化出三个空对象
obj1=People()
obj2=People()
obj3=People()

# 为对象定制自己独有的特征
obj1.name='雯婧'
obj1.age=18
obj1.sex='female'

obj2.name='樵夫'
obj2.age=28
obj2.sex='male'

obj3.name='书呆子'
obj3.age=28
obj3.sex='male'

# print(obj1.__dict__)
# print(obj2.__dict__)
# print(obj3.__dict__)
# print(People.__dict__)



#方式二、为对象初始化自己独有的特征
class People:
    country='China'
    x=1
    def run(self):
        print('----->', self)

# 实例化出三个空对象
obj1=People()
obj2=People()
obj3=People()

# 为对象定制自己独有的特征
def chu_shi_hua(obj, x, y, z): #obj=obj1,x='雯婧',y=18,z='female'
    obj.name = x
    obj.age = y
    obj.sex = z

chu_shi_hua(obj1,'雯婧',18,'female')
chu_shi_hua(obj2,'樵夫',28,'male')
chu_shi_hua(obj3,'书呆子',28,'male')




#方式三、为对象初始化自己独有的特征
class People:
    country='China'
    x=1

    def chu_shi_hua(obj, x, y, z): #obj=obj1,x='雯婧',y=18,z='female'
        obj.name = x
        obj.age = y
        obj.sex = z

    def run(self):
        print('----->', self)


obj1=People()
# print(People.chu_shi_hua)
People.chu_shi_hua(obj1,'雯婧',18,'female')

obj2=People()
People.chu_shi_hua(obj2,'樵夫',28,'male')

obj3=People()
People.chu_shi_hua(obj3,'书呆子',28,'male')




# 方式四、为对象初始化自己独有的特征
class People:
    country='China'
    x=1

    def __init__(obj, x, y, z): #obj=obj1,x='雯婧',y=18,z='female'
        obj.name = x
        obj.age = y
        obj.sex = z

    def run(self):
        print('----->', self)

obj1=People('雯婧',18,'female') #People.__init__(obj1,'雯婧',18,'female')
obj2=People('樵夫',28,'male') #People.__init__(obj2,'樵夫',28,'male')
obj3=People('书呆子',28,'male') #People.__init__(obj3,'书呆子',28,'male')


# __init__方法
'''
强调:
   1、该方法内可以有任意的python代码
   2、一定不能有返回值
'''

class People:
    country='China'
    x=1

    def __init__(obj, name, age, sex): #obj=obj1,x='雯婧',y=18,z='female'
        # if type(name) is not str:
        #     raise TypeError('名字必须是字符串类型')
        obj.name = name
        obj.age = age
        obj.sex = sex


    def run(self):
        print('----->', self)


# obj1=People('雯婧',18,'female')
obj1=People(3537,18,'male')

# print(obj1.run)
# obj1.run() #People.run(obj1)
# print(People.run)

クラスノート

1.異なる角度でステーションは、クラスの定義が異なる場合、実際のオブジェクトの詳細な分析のために需要
実際に2は、正確にそのような企業の現実、時にはプログラムとして、クラスベースのプログラムに等しくありません部署のクラスに分割する必要があり、ビジネスクラス......
3.時々 、プログラムの要件にするために、プログラムはまた、定義し、現実には、そのようなポリシークラスとして、クラスに存在しないことがあり、現実には存在しませんが、プログラム中それは非常に一般的なタイプです

Pythonのクラスには、特殊な性質を建て

类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)

おすすめ

転載: www.cnblogs.com/chao-sir/p/12636051.html