近づくな、Covid-19インスタンス

 

頼むからCovid-19インスタンスを中野クラスをスーパークラスに持つスバルインスタンスに移譲させないでくれと願う今日この頃です。

 

暇と退屈の倫理学のあらすじに興味深い描写があります。

時間とお金に余裕ができたら、好きなことをする。

19世紀だったら、需要(自分が好きなこと)が供給(好きなことを満たしてくれるサービス)の先に来ていたけど、

今は供給(広告が提供するサービス)が需要(自分の好きなこと)の先に来てしまっている。

 

「時間とお金に余裕ができたら、好きなことをする」

自分の本当に好きなことって時間とお金に余裕ができてからじゃないとできないのだろうか?

 

今のままだとお金に余裕ができる頃には、時間に余裕ができなくなって、結果として好きなことができないじゃないか、と2年前の新卒銀行員時代に考えていたこととリンクして、「暇と退屈の倫理学」の沼にハマっていきました。。

 

オブジェクト指向に対する理解を深めようとした一週間でした。

 

ウイルスクラスからCovid-19インスタンスが作られる。

ウイルスクラスには免疫力を下げるというメソッドがある。そして繁殖力が強い、飛沫感染するといった属性を持つ。

 

 

 

振る舞いとデータ、カプセル化

データは変数に入る

振る舞いは、データを扱う

この二つを一緒に格納することをカプセル化という。

カプセル化したものを設計図としてクラスに保管しておく。

Ruby

ビジネスロジック

アプリケーションをプレゼンテーション・ビジネスロジック・データアクセスの 3 つに分けたとき、「プレゼンテーションでもデータアクセスでもない部分がビジネスロジック

アプリケーションの中核をなすロジックを書く場所で、3層アーキテクチャ(プレゼンテーション層、ビジネスロジック層、データアクセス層)の一部を指している。MVCでいう、モデルとコントローラーが担う場所。

なんだか似ている用語が多くて戸惑ってしまう。

それぞれに対応するそうは下記のような画像で強引に理解することにする。

 

OSI 7階層参照モデルとは?

「ビジネスロジック」とは何か、どう実装するのか - Qiita

Gofデザインパターン

Rails wayに沿ってアプリの設計をしていくときに、開発者同士で共通の認識があったら効率がいい。

過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものを指しているそう。(cited: wikipedia

このGofgang of four)を参考にすると、オブジェクト指向型のアプリ設計がしやすくなる。

大きく下記三つのパターン分けがされていてる。

生成に関するパターン、構造に関するパターン、振る舞いに関するパターン

振る舞いに関するパターンは、クラスを設計するときに特に参考になった。

Java言語で学ぶデザインパターン入門

GoFのデザインパターンまとめ - Qiita

インターフェースと抽象クラス

前者が外部向けの設計図、後者が内部向けの設計図と表現されることが多い。

Javaで使われる用語だが、rubyにもインターフェースやダックタイピング、ポリモーフィズム等通ずるところが多いため、学習する価値はあると思う。

【詳解】抽象クラスとインタフェースを使いこなそう!! - Qiita

インターフェース

CAN DOの関係あるといえる。

テレビcan 音量調節、テレビcan 電源消し付け

継承先に対して、定義したものの実装を強制することができる

「Inputする値とOutputされる値が同じ」という規約がインターフェース。と認識している。

このインターフェースを継承させて多態性を作っていくと、ダックタイピングにつながってくる。

<aside> 💡 中(具体的な処理)は意識せず、外(他のクラス)から見てテレビが出来ることを定義する感じ

</aside>

インターフェース名には、作成したいインスタンス群を抽象的にした概念名をつけて、そのインターフェースを継承したインスタンスに保持しておいてほしいメソッドを、空のまま定義しておく。

ex)

テレビ(インターフェース)薄型テレビ(インスタンス)、ブラウン管(インスタンス

テレビに音量調節(メソッド)、電源消し付け(メソッド)、チャンネル切り替え(メソッド)といった空のメソッドを定義しておく。

抽象クラス

Is Aの関係にあると言える。

薄型テレビ is テレビ、ブラウン管 is テレビ

インターフェースと同様、継承先に対して、定義したものの実装を強制することができる。

継承されることを前提としてて作られているクラスなので、抽象クラスを直接インスタンス化させることはできない。

振る舞いの型(電源をオンオフする、音量調節する)を継承をし、具体的な処理を個性(属性、値)に合わせて上書き(オーバーライド)する。

インターフェースと抽象クラスの使い分け、活用方法 - Qiita

【Java入門】インターフェースとは?抽象クラス(abstract)との違い