┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
┃ ■┃
●┃● ● オ ブ ジ ェ ク ト 倶 楽 部 ■ ┃
┃ ■ ┃
┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
No.51 2004/06/30
■ I N D E X
┃
┣【Topics】納涼イベント参加者、本日締め切りです。
┣【Topics】「オブジェクト川柳コンテスト」作品受付中です。
┣【プログラミング】C#で学ぼうオブジェクト指向入門 [7]
┣【ツール】Jude通信[1]
┗【アンケート】気になるシステム業界 ホントのところ
〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
〇 納涼イベント参加者、本日締め切りです。
〇 〇━━━━━━━━━━━━━ ━━・
7月9日(金)に開催します、オブジェクト倶楽部納涼イベント。たくさんの参加
受付、本当にありがとうございます。本日が参加受付締め切りです。業務の状
態と相談して受付を保留していたあなた!決断のときですよ。
また、参加費のお支払いも本日締め切りとさせていただいております。こちら
もお忘れなく。
詳細はこちら:http://www.ObjectClub.jp/event/2004summer
〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
〇 「オブジェクト川柳コンテスト」作品受付中です。
〇 〇━━━━━━━━━━━━━ ━━・
「週刊オブジェクト倶楽部」50号発行記念『オブジェクト川柳コンテスト』へ
のたくさんのご応募ありがとうございます。締め切りは7月6日(火)になってい
ます。みなさんの力作、まだまだお待ちしております。
===開催概要===
■応募方法:以下の応募フォームにならって、editors@ObjectClub.jpまで
メールください。
■応募締め切り:7月6日(火)
■参加資格:特になし。
※「週刊オブジェクト倶楽部」の購読者以外の方も大歓迎!
■賞品:特選(1名)翻訳者サイン入り「リーンソフトウエア開発」
http://www.amazon.co.jp/exec/obidos/ASIN/4822281930/xp-jp22
入選(2名)書籍を予定
■審査方法:オブジェクト倶楽部内での投票を行います。
■応募フォーム
=====================================================================
お名前:
ハンドルネーム:
メールアドレス:
作品(5・7・5):
作品に関するコメント:
=====================================================================
※サンプル
=====================================================================
お名前:永和 太郎
ハンドルネーム:hiroshi
メールアドレス:xxx@ObjectClub.jp
作品(5・7・5):
オブジェクト
あぁわからない
オブジェクト
作品に関するコメント:
オブジェクト指向初心者が、いくらオブジェクト指向を勉強しても、
なかなかすっきりと理解できず、もがき苦しんでいる様子を表した
一句
=====================================================================
■応募に関する注意
・応募者本人のオリジナルの作品に限ります。
・二重投稿や、著しい類想類句の場合は受賞を取り消すことがあります。
・応募いただいた作品は、応募者本人の許可なくオブジェクト倶楽部のメルマ
ガやサイトにて公開します。
・作品、ハンドルネーム、頂いたコメント以外の個人を特定できる情報を公開
することはありません。
審査結果の発表は、7月9日(金)に行われるオブジェクト倶楽部のイベントの懇
親会内で行います。その後、オブジェクト倶楽部のサイトでも発表します。投
稿作品については、オブジェクト倶楽部のサイトで公開します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【プログラミング】C#で学ぼうオブジェクト指向入門 [7]
■はじめに
この記事は、初級開発者である私がみなさんと一緒にC#を使ってオブジェクト
指向(OO)の基礎を気軽に勉強していこう、という内容です。
■目標
前回は、ポリモフィズムのうれしい点を銀行口座の拡張を例に確認しました。
今回の目標は
『ポリモフィズムのしかけを確認する』
です。しかけを学習して、OOの理解をより深めていきましょう。
■内容
前回の銀行の口座の例を使って確認していきます。
まずは、Accountクラス、SavingDepositクラス、TimeDepositクラスを見てみ
ましょう。
======================================================================
abstract class Account {
public static Account CreateAccount(String className) {
Type type = Type.GetType(className);
return (Account)System.Activator.CreateInstance( type );
}
public abstract void Deposit(decimal money);
public abstract void Withdraw(decimal money);
}
class SavingDeposit : Account {
public override void Deposit(decimal money) {
Console.WriteLine("普通預金の預け入れの振る舞い");
// ・・・・
}
public override void Withdraw(decimal money) {
Console.WriteLine("普通預金の引き出しの振る舞い");
// ・・・・
}
}
class TimeDeposit : Account {
public override void Deposit(decimal money) {
Console.WriteLine("定期預金の預け入れの振る舞い");
// ・・・・
}
public override void Withdraw(decimal money) {
Console.WriteLine("定期預金の引き出しの振る舞い");
// ・・・・
}
}
======================================================================
●共通のインタフェースをまとめたAccount
SavingDeposit(普通預金)とTimeDeposit(定期預金)で預け入れ・引き出し
の具体的な振る舞いはそれぞれで異なります。しかし、どちらも預け入れ
(Deposit)と引き出し(Withdraw)のインタフェースがあることは共通です。
この共通インタフェースをまとめるために(抽象メソッドDeposit・Withdraw
で構成される)Accountの抽象クラスがあります。共通のインタフェースをC#
のinterfaceを使ってまとめることも考えられますが、ここでは、Accountにオ
ブジェクトの生成(CreateAccount)の実装を割り当てることにしたため、結果、
interfaceが使えず、抽象クラスを使っています。なお、口座の具体的な振る
舞いは、具象クラスでメソッドをオーバーライドして記述しています。
上のソースコードをポケーと見ると、「新しくVIP預金を追加する場合には、
SavingDepositなどをまねて・・・」と容易に想像できますね。
(補足:C#はJavaと異なり、classでメソッドのオーバーライドする場合、基
底クラスのメソッドにはabstract or virtualの修飾子、派生クラスのメソッ
ドにはoverrideの修飾子が必要になります。)
======================================================================
using System;
class MainClass {
// args[0] 利用したい口座の種類のクラス名
// 例 SavingDeposit,TimeDeposit
public static void Main(string[] args) {
Account account = null;
try{
account = CreateAccount(args[0]);
}catch{
Console.WriteLine("実行時引数が不正で," +
"アカウントのオブジェクト生成に失敗しました。");
return;
}
// ★ メッセージ送信,実行時に、
// オブジェクトによって振る舞いが異なる。
account.Deposit(10000);
account.Withdraw(9000);
}
private static Account CreateAccount(string className) {
return Account.CreateAccount(className);
}
}
======================================================================
●オブジェクトによって預け入れ・引き出しの具体的な振る舞いは異なる。
★をご覧ください。
account.Deposit(10000);
account.Withdraw(9000);
Deposit、Withdrawの呼び出しが記述されています。注目すべき点は、プログ
ラム記述時(コンパイル時)には、MainClassとSavingDepositやTimeDeposit
といった「具体的な」預金口座との間に、まったく関係がないことです。言い
換えると、MainClass内にはSavingDepositやTimeDepositといった単語が出て
きていないことです。代わりに共通インタフェースをまとめた「抽象的な」
AccountクラスとMainClassが関係しています。MainClassと「具体的な」口座
との間につながりがないおかげで、後から「具体的な」VIP預金(の預け入れ、
引き出し)を追加しても、MainClassを修正しなくても良いようになっていま
す。
(プログラム記述時やコンパイル時ではなく)実行時に、★の個所は、
accountオブジェクトの実体によって、普通預金のDepositの振る舞いをしたり、
定期預金のDepositの振る舞いをしたり、新しく追加したVIP預金の振る舞いを
したりします。もちろん、もっと別なDepositの振る舞いも、拡張すれば可能
です。
■まとめ
ポリモフィズムのしかけを銀行口座を例に確認しました。ポリモフィズムは、
オブジェクト指向の花形的存在です。これを理解すれば、オブジェクト指向
通になった気になれるという、すぐれものです。ポリモフィズムを理解して、
学習の幸福感・達成感を味わっちゃいましょう。(IENAGA)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/cgi-bin/question.cgi?E003+6+0
普通:
http://www.ObjectClub.jp/cgi-bin/question.cgi?E003+6+1
イマイチ:
http://www.ObjectClub.jp/cgi-bin/question.cgi?E003+6+2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【ツール】Jude通信[1]
こんにちは。梅田です。通常は『リファクタリング』での登場ですが、なんと
なくJudeの近況報告を書きたくなった(梅田はJudeチームの一員なのです)ので、
『Jude通信』を書いてみました。不定期連載の予定ですので、次回は忘れた頃
に届くかもしれません。
Judeを知らない方がいらっしゃるかもしれませんので、まずはJudeを簡単に紹
介しましょう。Judeは【無償で公開中の国産UMLモデリングツール】です。メ
インターゲットはJava言語をご利用の方となりますが、コード生成やコードの
読み込みなどを行わないのであれば、他のオブジェクト指向言語をご利用の方
にもお使いいただけます。そして読み方は「ジュード」。ユダではありません
よ。詳しくは、Judeホームページ(*1)をご覧ください。
それでは、Judeの近況に移りましょう。現在のバージョンは1.3です。次のリ
リース時期は、残念ながらまだ未定ですが、それほど遠くではないはずです。
そこで、リリースを待っている実装済みの機能を紹介してしまいましょう!
[モデルの複製]
リクエストが多かった機能です。たしかに操作をオーバーロードしたいときや、
サブクラスをいくつか作成したいときには、いちいち作成しなければならない
ため非常に不便でした。今回の複製機能は、ツリーに表示されているアイテム
からポップアップメニューを表示して実行するもので、クラス・属性・操作が
対象となっています。
[属性・操作の表示・非表示を個別切り替え]
クラス図上のクラス属性・操作の表示・非表示を個別に切り替えることが可能
になりました。クラス図を使って設計を伝えたりするときには、相手に伝えた
いことにフォーカスすることが大切です。伝える必要のない属性・操作は隠し
たいですよね。小さい変更ですが、大きな改善です。
[選択アイテムのカーソル(←↑↓→)キー移動]
選択アイテムをカーソルキーで移動できるようになりました。図上のグリッド
にフィットするような移動も可能(*2)です。ユーザフレンドリーな操作感が売
りのJudeとしてはうれしい改善ですね。
[その他]
他にも改善がありますので、興味を持った方は、Judeの改善項目一覧(*3)にア
クセスしてご確認ください。
以上、今回紹介した機能は、ほとんどがユーザサポート(*4)やユーザメーリン
グリスト(*5)でいただいたリクエストです。他のツールと違いユーザからのリ
クエストが通りやすいのもJudeの魅力の1つ! Judeチームは、今後も皆様か
らのリクエストをお待ちしております。
それでは次回をお楽しみに!(梅田)
*1 Judeホームページ(http://objectclub.esm.co.jp/Jude/)
*2 マウスによる移動もグリッドにフィット可能です。
*3 改善項目一覧(http://objectclub.esm.co.jp/Jude/ImprovementList.html)
*4 ユーザサポート(jude-info@esm.co.jp)
*5 jude-users-ctl@esm.co.jp宛てに、subscribe JUDE_USERSと本文に書いて
お送りいただくと登録確認のメールが届きます。
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/cgi-bin/question.cgi?B004+0+0
普通:
http://www.ObjectClub.jp/cgi-bin/question.cgi?B004+0+1
イマイチ:
http://www.ObjectClub.jp/cgi-bin/question.cgi?B004+0+2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【アンケート】気になるシステム業界 ホントのところ
今週は「初めて覚えたプログラミング言語はなんですか?」のホントのところ。
Basic/VisualBasicです。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+0
COBOLです。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+1
C言語です。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+2
C++です。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+3
C#です。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+4
FORTRANです。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+5
Javaです。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+6
Lispです。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+7
Pascalです。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+8
福井弁です。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+9
その他
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+10
プログラマではありません。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+11
それは秘密です。
http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+16+12
ちょっと語らせて!
editors@ObjectClub.jp まで詳細を!!
アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「在宅勤務ですか?」の結果は公開中。是非ご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru
また、このコーナーで取り上げてほしい、あなたの素朴な疑問も募集しており
ます。
⇒editors@ObjectClub.jp
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記
こんにちは、編集人です。
今日で6月も終わりですね。今年も半分が終わってしまいましたね。早いもの
です。明日からは7月。いよいよ夏本番ですね。
オブジェクト倶楽部の面々は、納涼イベントの開催が近づくにつれて、バタバ
タしてきております。みなさんに楽しく、有意義な時間を過ごしていただける
よう、暑さに負けずがんばっております。参加してくださる皆さんも、夏を感
じさせるアイテムの持参または着用で、夏の気分を盛り上げて下さる方、大歓
迎です!
今週の強引な一言
*** 案ずるよりも生むが易し(ことわざ)***
全てを計画しなくても、意外とうまく行くものです。無計画というのはちょっ
と勘弁ですが。(めぐみ)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.objectclub.jp/community/object_ml/help/
〇 免責事項、過去の記事は ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
■ 編集代表:平鍋 健児
Copyright (c)2003-2004 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.