ソフトウェア工学

D.R.Y原則とOCP

新卒ソフトウェアエンジニアが知っておきたい、ソフトウェア工学の原則に「D.R.Y原則」と「OCP」がある。

D.R.Yとは、”Don't repeat  yourself"の略で、「同じことを繰り返すな」という意味だ。

一方のOCPとは、"Open Closed Principle"の略で、「拡張に対しては開いていて、修正に対しては閉じていなければならない」という意味だ。

これらは近い関係にあり、D.R.Y原則に従って設計すれば、OCPを守りやすくなり、D.R.Y原則に従わなければ、OCPを守りにくい。

以前、Pythonを使ってこれらを説明したことがあるのだが、その時、ソフトウェア開発を2年間経験した3年目のエンジニアから、「D.R.Y原則なんて当たり前だと思う。それに従わないソースコードなんて最初から書きません。ただ、機能の拡張にともなう修正がある場合は難しそうなので、最初から拡張を見越した設計にするべきかな」という的を得た回答をいただいた。

その通りです。素晴らしい。

ところで、D.R.Y原則とOCPは、ソフトウェアの設計やプログラミングだけでなく、エクセルを使ったデータ整理やハードウェア設計にも適用できるはずだ。

時間を見つけて、この辺りのことも考えてみたいと思う。

★WOZ★

| | コメント (0) | トラックバック (0)

世界征服も夢ではない! Googleを支える技術

久しく会っていなかった友人と、

久しぶりに話す機会があった。

話は自然とGoogleに移っていくのだが、

Googleのやっていることはとてもシンプルで、

世界の再定義だな、という話をした。

地図、電話、コミュニケーション、

図書館、OS、システム言語、パソコン、

という具合に、

Googleが再定義した、

あるいはこれからしようとしているものは多い。

この調子で行くと、

世界征服も夢ではないな。

西田圭介さんの著作「Googleを支える技術」は、

そんなGoogleの現在を支えている、

MapReduceに代表されるテクノロジーを、

わかりやすく説明している。

★WOZ★

Googleを支える技術 Googleを支える技術

販売元:楽天ブックス
楽天市場で詳細を確認する

| | コメント (0) | トラックバック (0)

D.R.Yと継承

ソフトウェア工学の原則の一つに「D.R.Y原則」があります。

D.R.Yとは”Don't repeat  yourself"のことで、

「同じことを繰り返すな!」という意味です。

オブジェクト指向プログラミング言語では、

クラスの継承にこの原則が使われています。

例えば、下のコードは、犬型ロボットと猫型ロボットをつくって、

自己紹介をさせてみようというコードを、

Pythonで書いたものです。

//ここから
class Dog:
    def __init__(self, name):
        self.name = name
        self.cryWord = "Bow-wow"

    def cry(self):
        print ("{0}, I am {1}.".format(self.cryWord, self.name)) 

class Cat:
    def __init__(self, name):
        self.name = name
        self.cryWord = "Mew"

    def cry(self):
        print ("{0}, I am {1}.".format(self.cryWord, self.name))   

if __name__ == '__main__':
    pochi = Dog("Pochi")
    tama = Cat("Tama")

    myPets = [pochi, tama]

    for pet in myPets:
        pet.cry()
//ここまで

実行すると、

Bow-wow, I am Pochi.
Mew, I am Tama.

と、犬型ロボットの"Pochi"と猫型ロボットの"Tama"が自己紹介をしました。

さて、

上のコードを見てみると、

同じような処理をしているコードが重複しています。

両方のクラス(DogとCat)に同じ修正を加える場合に、

どちらかを修正し忘れてしまいそうです。

そこで、この後、オブジェクト指向の教科書や講座では、

犬型ロボットも猫型ロボットも同じ”動物型”ロボットなのだから、

動物型クラス(Animal)をつくって、そこから犬型クラスと猫型クラスを継承させよう、

となるわけです。

で、例えば、この話を聞いた新人プログラマくんたちは、

オブジェクト指向の「継承」が重要概念なんだな、

と思い込むのですが、

それはちょっと違うんだけど、という

この話の続きはまた今度。

★WOZ★

| | コメント (0) | トラックバック (0)