Python オブジェクト指向

Pythonでモジュールやクラスの整理をしました

こんにちは Tomoです。

今回は勤怠管理のソースコードを整理したのでその内容について投稿します。

整理するにあたりクラス化を行っています。ただし、デザインパターンについては誤っている点もあるかもしれません。その点につきましてはご了承下さい。

ソースコードを整理した理由

整理した理由は、今後交通費精算のコーディングを検討しており、その作業を行う前にソースコードをきれいにしたいことと、私自身がオブジェクト指向を再度理解する為に行っています。

事前準備

前回の続きとなります

以下の内容を確認してください。


構成イメージ

ソースコードの構成イメージです。

構成としては、3つのモジュールを作成しました。

モジュールについて

Pythonにおいてモジュールは、パイソンファイル(.py)形式のようです。

今回作成したプログラムは、『Google Calendarから勤怠の予定を取得して、表計算ソフトに書き込む』ことが目的です。

「Google Calendarから勤怠の予定を取得」を『入力』とし、「表計算ソフトに書き込む」を『出力』としてその役割をそれぞれモジュールとしています。

また、「勤怠」も役割として扱います。このためモジュールにしています。

ちなみにこれは、『Google Calendarから通勤の予定を取得して、表計算ソフトに書き込む』や、『Google Calendarからプロジェクトの予定を取得して、表計算ソフトに書き込む』

など『通勤』や、『プロジェクト』のモジュールを作成するだけで『入力』と『出力』の部分は極力変更しない方向で今後プログラミングできたらというおもいもあり、この構成としました。

クラスについて

各モジュールのクラスについて記載します。

クラスの説明は難しいですが、私なりの見解を例で説明します。間違ているかもしれませんのでご了承下さい。もしかしたら類似の例題があるかもしれませんがご了承ください。

鯛焼きを例にします。クラスはよく型といわれます。鯛焼きでいうことろの鯛焼きを作る『鯛焼き型』がクラスのイメージです

オブジェクトですが、オブジェクトは抽象的な物(実態が無い物)としてよく扱われます。なので、お客さんが「おっちゃん『鯛焼き』ひとつ頂戴」の『鯛焼き』の表現(言葉や名詞)がオブジェクトのイメージです。

最後にインスタンスですが。インスタンスは実態(実態が有る物)として扱われます。おっちゃんが作った『鯛焼き』がインスタンスのイメージです。

ちなみにPythonにおいてクラスの命名規則は、「キャメルケース」といい単語の頭文字を大文字で書きます。

CaleendarEventClass

CaleendarEventClassはEVENTのデータを扱うクラスです。予定の「タイトル」「開始日時」「終了日時」「繰り返し予定のルール」などのイベントデータを扱います。

EVENTデータと同じ項目を扱いたいと思っています。

CaleendarReadClass

グーグルカレンダーを読み込む処理をクラスにしています。

クラス内のメソッドは、zipファイルからの読み込みですが、ファイルへの書き込み、Google APIを使って直接読み込む場合もこのクラスに書きたいと思います。

なお、書き込みの処理など増やしたい場合は、モジュールは同じですがクラスは別途用意したいと思います。

SpreadSheetWriteAbstractClass

表計算ソフトに書き込む抽象クラスです。

抽象クラスとは?なにかを説明するのは難しいですがやってみます。

『鯛焼きの型』をクラスと説明しましたが、鯛焼きの型には、大きさが違うものや、形がちょっとちがうものがあります。

仮に『鯛焼きの取っ手は同じ』で「大きさ」や、「形」を『取り外し交換』できる『鯛焼きの型』があるとします。

この場合『取っ手』が抽象クラスになります。また、この抽象クラスは親クラスと呼ばれることもあり、『大きい鯛焼きの型』、『小さい鯛焼きの型』を子クラスと呼んだりします。

抽象クラスは『取っ手』の部分が共通で使えるため、プログラムにおいても共通な処理は抽象クラスにコーディングすることが多いです。

SpreadSheetWriteClass

順番が違いますが、attendancemanagementモジュールのSpreadSheetWriteClassについて書きます。

これは、先ほど説明したCaleendarReadClassの子クラスになります。

ちなみに、クラスの親、子関係を継承といいます。

上記のような図で表現します。

パイソンでは、クラス宣言時に親のクラスを記述します。

    
class SpreadSheetWriteClass(spreadsheet.SpreadSheetWriteAbstractClass):
    

CallendarPlanClass

最後にCallendarPlanClassです。これはCaleendarEventClassのようなデータを扱うクラスとして定義しています。

今回の勤怠管理では、出社した情報を保持するようにしています。

繰り返しの予定などイベントは一つの情報ですが、Planクラスでは、その繰り返し情報を日毎のデータに変換しています。

まとめ

今回も以下のページに資産を配置しています。

勤怠管理の資産はこちらです

資産もいつくか修正しています。

なお今回からプログラムの呼び出しが以下のようになります。

プログラムの最初の引数に1を記載してください。

2つ目の引数に出力する年月を記載しました。年月を記載して下さい。(YYYYMM形式)

    
pyhon main.py 1 202001
    

コメント

0 件のコメント:

コメントを投稿

コメントをお待ちしています。