Object-oriented-python-introduction

提供:Dev Guides
移動先:案内検索

オブジェクト指向Python-はじめに

プログラミング言語は絶えず出現しており、さまざまな方法論が存在します。オブジェクト指向プログラミングは、このような方法論の1つであり、過去数年で非常に普及しています。

この章では、Pythonプログラミング言語をオブジェクト指向プログラミング言語にする機能について説明します。

言語プログラミング分類スキーム

Pythonは、オブジェクト指向プログラミングの方法論の下で特徴付けることができます。 次の図は、さまざまなプログラミング言語の特性を示しています。 Pythonをオブジェクト指向にする機能を観察してください。

言語学クラス

カテゴリー

ランゲージ

プログラミングのパラダイム

手続き型

C、C ++、C#、Objective-C、java、Go

スクリプティング

CoffeeScript、JavaScript、Python、Perl、Php、Ruby

機能的

Clojure、Eralang、Haskell、Scala

コンパイルクラス

静的

C、C ++、C#、Objective-C、java、Go、Haskell、Scala

動的

CoffeeScript、JavaScript、Python、Perl、Php、Ruby、Clojure、Erlang

型クラス

強い

C#、java、Go、Python、Ruby、Clojure、Erlang、Haskell、Scala

Weak

C、C ++、C#、Objective-C、CoffeeScript、JavaScript、Perl、Php

メモリクラス

マネージド

その他

管理対象外

C、C ++、C#、Objective-C

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

  • オブジェクト指向*は、オブジェクトに向けられていることを意味します。 言い換えると、機能的にオブジェクトのモデリングに向けられていることを意味します。 これは、データと動作を介して相互作用するオブジェクトのコレクションを記述することにより、複雑なシステムのモデリングに使用される多くの手法の1つです。

Pythonは、オブジェクト指向プログラミング(OOP)であり、オブジェクトとクラスを使用してアプリケーションを設計および構築することに焦点を当てたプログラミング方法です。 オブジェクト指向プログラミング(OOP)の主要な柱は、継承、ポリモーフィズム、抽象化、 *カプセル化*です。

オブジェクト指向分析(OOA)は、問題、システム、またはタスクを検査し、オブジェクトとそれらの間の相互作用を識別するプロセスです。

オブジェクト指向プログラミングを選択する理由

Pythonはオブジェクト指向のアプローチで設計されました。 OOPには次の利点があります-

  • 明確なプログラム構造を提供します。これにより、実際の問題とその解決策を簡単にマップできます。
  • 既存のコードの簡単なメンテナンスと変更を容易にします。
  • 各オブジェクトが独立して存在し、既存の機能を乱すことなく新しい機能を簡単に追加できるため、プログラムのモジュール性が向上します。
  • 提供されたコンポーネントをプログラマーが簡単に調整および変更できるコードライブラリの優れたフレームワークを提供します。
  • コードの再利用性を与える

手続き型と オブジェクト指向プログラミング

手続きベースのプログラミングは、 functions/procedure/routines の概念に基づいた構造プログラミングから派生しています。 手続き指向プログラミングでは、データに簡単にアクセスして変更できます。 一方、オブジェクト指向プログラミング(OOP)では、問題を*オブジェクト*と呼ばれる多数のユニットに分解し、これらのオブジェクトを中心にデータと機能を構築できます。 プロシージャや関数よりもデータに重点​​を置いています。 また、OOPでは、データは非表示であり、外部プロシージャからアクセスできません。

次の図の表は、POPアプローチとOOPアプローチの主な違いを示しています。

手続き指向プログラミング(POP)との違い。 オブジェクト指向プログラミング(OOP)。

Procedural Oriented Programming ObjectOriented Programming
Based On In Pop,entire focus is on data and functions Oops is based on a real world scenario.Whole program is divided into small parts called object
Reusability Limited Code reuse Code reuse
Approach Top down Approach Object focused Design
Access specifiers Not any Public, private and Protected
Data movement Data can move freely from functions to function in the system In Oops, data can move and communicate with each other through member functions
Data Access In pop, most functions uses global data for sharing that can be accessed freely from function to function in the system In Oops,data cannot move freely from method to method,it can be kept in public or private so we can control the access of data
Data Hiding In pop, so specific way to hide data, so little bit less secure It provides data hiding, so much more secure
Overloading Not possible Functions and Operator Overloading
Example-Languages C, VB, Fortran, Pascal C++, Python, Java, C#
Abstraction Uses abstraction at procedure level Uses abstraction at class and object Level

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

オブジェクト指向プログラミング(OOP)は、アクションではなく*オブジェクト*の概念に基づいており、ロジックではなく*データ*に基づいています。 プログラミング言語がオブジェクト指向であるためには、クラスとオブジェクト、および基本的なオブジェクト指向の原則と概念、つまり継承、抽象化、カプセル化、ポリモーフィズムの実装と使用を可能にするメカニズムが必要です。

エラー

オブジェクト指向プログラミングの各柱を簡単に理解しましょう-

カプセル化

このプロパティは、不必要な詳細を隠し、プログラム構造の管理を容易にします。 各オブジェクトの実装と状態は、明確に定義された境界の後ろに隠れており、それらを操作するためのクリーンでシンプルなインターフェースを提供します。 これを実現する1つの方法は、データをプライベートにすることです。

継承

一般化とも呼ばれる継承により、クラスとオブジェクト間の階層関係をキャプチャできます。 たとえば、「果物」は「オレンジ」の一般化です。 継承は、コードの再利用の観点から非常に役立ちます。

抽象化

このプロパティを使用すると、詳細を非表示にして、コンセプトまたはオブジェクトの本質的な機能のみを公開できます。 たとえば、スクーターを運転している人は、クラクションを押すと音が出ることを知っていますが、クラクションを押すと実際に音がどのように発生するかについてはわかりません。

多型

ポリモーフィズムは多くの形態を意味します。 つまり、モノやアクションはさまざまな形や方法で存在します。 多態性の良い例の1つは、クラスでのコンストラクタのオーバーロードです。

オブジェクト指向Python

Pythonプログラミングの中心は*オブジェクト*と OOP ですが、コードをクラスに整理することでOOPの使用を制限する必要はありません。 OOPは、Pythonの設計哲学全体に追加され、プログラミングへのクリーンで実用的な方法を奨励します。 OOPは、より大きく複雑なプログラムの作成も可能にします。

モジュールと クラスとオブジェクト

モジュールは「辞書」のようなものです

モジュールで作業する場合、次の点に注意してください-

  • Pythonモジュールは、再利用可能なコードをカプセル化するパッケージです。
  • モジュールは、 init。py ファイルのあるフォルダーにあります。
  • モジュールには関数とクラスが含まれます。
  • モジュールは import キーワードを使用してインポートされます。

辞書は*キーと値*のペアであることを思い出してください。 つまり、キー EmployeID を持つ辞書があり、それを取得したい場合は、次のコード行を使用する必要があります-

employee = {“EmployeID”: “Employee Unique Identity!”}
print (employee [‘EmployeID])

あなたは、次のプロセスでモジュールで作業する必要があります-

  • モジュールは、いくつかの関数または変数を含むPythonファイルです。

  • 必要なファイルをインポートします。

  • これで、「。」*(ドット)*演算子を使用して、そのモジュールの関数または変数にアクセスできます。

    *employee* という名前の関数を持つ *employee.py* という名前のモジュールを考えてみましょう。 関数のコードは以下のとおりです-
# this goes in employee.py
def EmployeID():
   print (“Employee Unique Identity!”)

ここでモジュールをインポートし、関数 EmployeID にアクセスします-

import employee
employee. EmployeID()

次のように、 Age という名前の変数を挿入できます-

def EmployeID():
   print (“Employee Unique Identity!”)
# just a variable
Age = “Employee age is **”

今、次の方法でその変数にアクセスします-

import employee
employee.EmployeID()
print(employee.Age)

さて、これを辞書と比較しましょう-

Employee[‘EmployeID’] # get EmployeID from employee
Employee.employeID() # get employeID from the module
Employee.Age # get access to variable

Pythonには一般的なパターンがあることに注意してください-

  • key = value スタイルのコンテナを取る
  • キーの名前で何かを引き出す

モジュールを辞書と比較するとき、以下を除いて、両方は似ています-

  • dictionary の場合、キーは文字列であり、構文は[key]です。
  • *モジュール*の場合、キーは識別子であり、構文は.keyです。

クラスはモジュールのようなものです

モジュールは、Pythonコードを保存できる特殊な辞書であるため、「。」演算子を使用してアクセスできます。 クラスは、関数とデータのグループを取得してコンテナ内に配置する方法であり、「。」演算子を使用してそれらにアクセスできます。

あなたが従業員モジュールに似たクラスを作成する必要がある場合は、次のコードを使用してそれを行うことができます-

class employee(object):
   def __init__(self):
      self. Age = “Employee Age is ##”
   def EmployeID(self):
      print (“This is just employee unique identity”)

注意-クラスは、モジュールよりも優先されます。クラスをそのまま再利用できるため、多くの干渉がありません。 モジュールでは、プログラム全体で1つしかありません。

オブジェクトはミニインポートのようなものです

クラスは*ミニモジュール*のようなものであり、 instantiate という概念を使用して、クラスの場合と同様の方法でインポートできます。 クラスをインスタンス化すると、*オブジェクト*を取得することに注意してください。

あなたが示すように、関数のようなクラスを呼び出すことに似て、オブジェクトをインスタンス化することができます-

this_obj = employee() # Instantiatethis_obj.EmployeID() # get EmployeId from the class
print(this_obj.Age) # get variable Age

次の3つの方法のいずれかでこれを行うことができます-

# dictionary style
Employee[‘EmployeID’]
# module style
Employee.EmployeID()
Print(employee.Age)
# Class style
this_obj = employee()
this_obj.employeID()
Print(this_obj.Age)