第2回 オブジェクト指向、本当に分かってる?

http://jibun.atmarkit.co.jp/lskill01/rensai/imajava02/imajava01.html
ふむ.全然分かってないようだね.

いつものように『UMLモデラーによるオブジェクト指向』の臭いがプンプンする.

このプログラムは、前回も説明したとおり自動販売機(Vending)とその利用者(User)をシミュレートしたものです。

おや?自動販売機は"vending machine"じゃないのかな?vendingと無意味に省略するのは可読性が損なわれ,開発者を混乱させるだけなので好ましくない.*1

クラスを作成しておくことによって、保守性も向上します。

OOPは保守性を上げるけれど,クラスだけを切り出しても意味はないよ.

例えば、自動販売機が故障したときのことを考えてみてください。故障個所を探す際に、設計図があればその場所を的確に把握することができ、ほかの機能に影響を与えずに修理(修正)することができるはずです。つまり、クラスがあることによってメンテナンスや仕様変更が容易になるのです。

違うな.そういう論理からすると「『プログラム』という設計図があるからソフトウエアは常に変更が容易に行える」ということになる.しかし現実はそんなに甘くはない.OOPの柔軟性はそれとは別次元の話だ.

クラスを作成しておく最大のメリットは、再利用性(汎用性)です。

OOPと再利用性に深い関わりがあるのも事実だが.

自動販売機クラスに定義した「自動販売機」というクラス名や「商品名」などの属性名は、非常にあいまいで抽象的です。つまり、このクラスからは「ジュースの自動販売機」や「タバコの自動販売機」など、「自動販売機」と名の付くものなら何でも生成できる可能性があるのです。

「可能性がある」かもしれないが実用性は0.いったい何年前の『オブジェクト指向』の話をしているんだろう.ここで出ている例は,いわゆる『差分プログラミング』の話だが,差分プログラミングが幅を利かせたのは1980年代後半くらいまでかな.

継承による拡張は決して万能ではない.詳細はEffectiveJava,項目15「継承のために設計および文書化する,でなければ継承を禁止する.」などを参照のこと.

Effective Java プログラミング言語ガイド

Effective Java プログラミング言語ガイド

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

クラスの段階では意図的に抽象的に定義し、オブジェクトを生成する際に属性の値を決定するような仕組みは、非常に合理的だといえます。
オブジェクトの共通点を見いだして、その共通項目を定義した抽象的なクラスこそ、汎用性が高く使い回しの利くものになるのです。

こういう曖昧さはOOPの特徴ではなく,この『設計者』の初歩的且つ致命的なミス.OOPというのはもっと厳密なものです.絶対に抽象的に定義してはいけません.

あとは面倒なので省略.

*1:Vendingクラスだと「売り歩く」という行為そのもののオブジェクトだと見なされ,名前からは自動販売機クラスだとは予想できない.

ばかばかしい人月工数

http://itpro.nikkeibp.co.jp/article/Watcher/20060721/243941/

開発も経験したことがない人に工数を算出されて何人月という数値が生まれます。安すぎるとか高すぎるとか勝手に議論されて,無謀なスケジュールが目の前に出現することになります。オリジナルや個別カスタマイズという,他業種であれば特別価格をつけられるところが,人間が働いた期間でその価値が判定されます。

言うまでもなくその通り.

派遣社員になると更に環境が悪化します。難易度や経験を無視して,奴隷のようにこきつかわれても,毎月固定額しか請求できません。土木作業の単純労働のような考え方です。提供しているのは,かなり高度な知識労働のはずなのにです。

これについては正社員でも変わらなかったな.技術レベルに関係なく一律だった.

ただし,開発現場に覇気がない企業に,未来はありません。現在あちこちで問題になっているソフトウエアの品質の低さは,その労働環境との関連が極めて高いと思います。

今のままだとIT業界に未来があるとは思えない.

拝啓 学生様、熱い未来へのチケットいかがですか?

http://www.itmedia.co.jp/enterprise/articles/0607/12/news017.html

作られたものを使うという意識から“創る”ほうに意識を向けてほしい

その意見には大いに賛成する.でも創らない人の方が給料が高いよ.

そうした海外のソフトウェアをブラックボックスのまま組み合わせて利用するだけでは、結果としてソフトウェア技術が空洞化してしまう危険性はかねてから指摘されてきた。また、中国やインドなどの国々がITの世界で重要な位置づけを占めてくるであろう近い将来において、ソフトウェアの分野で彼らとどうやり合っていくのかが、重要な問題として浮かびつつある。

今となっては極めて厳しいでしょうね.

産業界が求める人材と、将来を担う学生のスキルギャップの発生、

そりゃあ誰だって使い捨ての道具にはなりたくないからね.企業が求めるのは安価で入手可能な,使い捨てできる便利な道具.