Mops

Mike's Object-oriented Programming System

Version 2.6

訳:渡辺 伸(uw4s-wtnb@asahi-net.or.jp)

Part I

チュートリアルのイントロダクション

 Mopsはオブジェクト指向のプログラミング環境です。Kriya,Inc.にてCharles Duffにより開発され販売されたNeonという言語から発展させたものです。
 KriyaはNeonのサポートを中止し、ソース コードをpublic domainにしました。その名称:Neonの所有権だけは保持しています。

Mops implemented by: Michael Hore
Able assistance from: Doug Hoffman
 Greg Haverkamp
 Xan Gregg
Documentation updated: Version 2.6, June 1995
Documentation formatted by: Craig Treleaven
 
 
 

この文書を印刷するには

※訳注:この部分は原文の文書フォーマットについて書かれています。この翻訳文書には適用できませんので悪しからず。

 この文書はMicrosoft Word バージョン 5.1で作製されています。フォントにはTimes, Courier, 、Helveticaが使用されています。Laserwriter 7用ドライバとUSレター用紙でポートレート配置にしてfractional widths 可能にしてフォーマットしました。もしあなたが他の方法で印刷したいのでしたらページ区切りをしなおして目次を作りなおす必要があります。次を参照してください。
 

この文書のほとんどすべての段落はWordの機能を使ってフォーマットしてあります。フォーマットは一貫しており、そのため再フォーマットはすぐにできます。
 

オンラインで参照する
もちろんこのマニュアルすべてをスクリーン上で読むことができます。Wordの 検索 コマンドで見たい項目をすぐに表示させることができます。また、次のような方法はあまり知られてはいないのですが非常に有用です。アウトライン表示を使い、スクリーン上部のルーラーのメ2モをクリックします。Wordの機能によりLessonとその見出しが表示されます。アウトライン表示でどの行がウインドウの最上段にあっても、それが標準の表示方法に戻したときもその行がウインドウの最上段になります。アウトライン表示でさがすことにより、見たい部分をすぐに標準状態で表示することができます。

両面印刷

 公開された状態では紙を節約するために両面印刷をするようになっています。もしこれまでに両面印刷をしたことが無いのでしたら、最初の2、3ページで練習をしてから全部を印刷されたほうが良いでしょう。ほとんどのプリンタではWordのオプション(印刷ダイアログ)で奇数ページのみを先に印刷してその後に偶数ページを印刷することになります。
 

 片面印刷

もし両面印刷が面倒であればDocumentダイアログでGutterマージンを0にして(訳注:ごめんなさい。どのマージンのことやらわかりませんでした。)印刷して下さい。左と右の各マージンを調整した場合でも、印刷幅を6.5インチにすればページ区切りは元のままになります。空白ページもそのままになるので各レッスンは奇数ページから始まります。
 
 

A4 用紙

Page SetupノダイアログでA4用紙を選択した場合、ページの区切りは変わってしまいます。
以下のようにして目次を作りなおして下さい。私の知る限りでは、段落のスタイルは紙の幅にきちんと合わせられます。しかしタブストップが6.5インチなので、奇数ページのヘッダが1/4インチだけ広げられます。気になるようでしたらヘッダのスタイルでそれを6.25に直して下さい。
 
 


目次

目次にはTable of Contentsノ ダイアログを使用してレベル1とレベル2を表示させて下さい。

 図のキャプションは見出し5のスタイルです。しかし特に必要を感じないので図の目次は作りませんでした。

はじめに 1

レッスン 1 9 レッスン 2 13 レッスン 3 17 レッスン4 21 レッスン 5 27 レッスン6 31 レッスン 7 35 レッスン 8 37 レッスン 9 41 レッスン 10 45 レッスン 11 49 レッスン 12 55 レッスン 13 61 レッスン 14 65 レッスン 15 67 レッスン 16 77 レッスン 18 89 レッスン 19 95 レッスン 20 101 レッスン 21 105

はじめに

Mopsはオブジェクト指向のプログラミング環境です。Kriya,Inc.にてCharles Duffにより開発され販売されたNeonという言語から発展させたものです。
KriyaはNeonのサポートを中止し、ソース コードをpublic domainにしました。その名称:Neonの所有権だけは保持しています。
 

 Mopsは多くの機能追加をしたNeonの完全な再インプリメンテーションです。またパブリックドメインのソフトウエアです。

 Mopsという名前は"Mike's Object-oriented Programming System"の頭文字ですが、この業界ではあまりに多くの頭文字単語がはびこっているので、これを押し付けるつもりはありません。ですからMOPSではなくMopsとつづります。
 わたしの願いは、Mopsのユーザーがその開発を分かちあい貢献しあうことです。一人の一時的な作業ですから、私は商業ベースの多機能でいたれりつくせりのMac用開発システムと競争することはできません。私自身は、Mopsのnucleusと基本的なシステムコードという低レベルでのインプリメントが楽しめればよいと思っています。
 

 この導入部では、Mopsの基本的な概念と用語について説明します。この過程でMopsのプログラムがどういうもので他の多くのプログラミング言語とどう違うかが判ってくると思います。Mopsのガイドツアーにもお連れいたします。

始める前に

 まず初めにしなければならないのは、Mopsのフルシステムをインストールすることです。アプリケーション"Mops"と大量のソースファイルがあるはずです。"Mops"はフルシステムの核("nucleus"または"kernel"と呼びます)の部分にすぎません。フルシステムを生成するためにはnucleusでソースファイルをコンパイルしなければなりません。次の説明に従えば簡単にできます。
(ところで、こんなことをする理由と言うのは、コンパイルされたバイナリを入れないことによりパッケージのサイズを小さくするためです。)

-------------------------------------------------------
訳注:以下のコンパイル作業はReadmeにありますので省略します。
-------------------------------------------------------
 
 

バックアップ について

 バックアップの重要性については言い過ぎるということはないでしょう。ハードディスクを使用している方はバックアップを定期的に行って下さい。プログラミング作業ではシステムクラッシュは日常茶飯事です。しかし定期的にバックアップを行っていれば恐くありません。
 Mopsの配布ファイルのバックアップをとっておくのも良いでしょう。Mopsシステムが壊れたときにもすぐに元どおりにすることができます。

エディタの使用について

 Mopsには備え付けのエディタがありません。しかしQuick Edit (QE) と組み合わせて使用することができます。Quick Edit はDoug HoffmanがMopsでの使用を念頭において作製したものです。これは"Quick Edit ト"に入っています。もしMopsとQEが共に立ち上がっていれば、Apple Eventで互いに通信して便利な機能が使えるようになっています。MopsからはQEに特定のファイルを開かせることができます。エラー発生時にはこれは自動的に行われます。QEからはテキストをMopsに送って翻訳させることができます。あるいはその時開いているファイルを読み込ませることができます。また、QEにはMopsのオンライン用語集があります。ですから我々はQEを試してみられるよう強くお薦めしています。

 オンライン用語集を使うには、あるワードをハイライト表示させ、Specialメニューの中のReferenceを選びます。あるいはcommandキー(アップルキー)と3を同時に押します。また、用語ウインドウで、調べたい言葉をタイプすればそこが表示されます。"Quick Edit ト"の中のReadmeファイルにQEの使用方法が書かれています。
 

Mops  オブジェクト指向言語

 Mopsではプログラミングの多くはオブジェクトにメッセージを送ることにより行われます。Mopsのオブジェクトは実世界のもの(オブジェクト:四角形、マッキントッシュのウインドウ、画家のキャンバス、銀行の口座など)のシミュレーションとすることもできます。Mopsのプログラムが実行されるとき、比較的短い命令リストがオブジェクトの骨組みを経由してプログラムの実行をさせます。そしてオブジェクトは生を与えられます。四角形は自分自身をスクリーンに描きます。ウインドウが表れます。マウスコントロールされたブラシが画家のキャンバスを塗ります。銀行の口座が収入と支出のモニターをします。
 Mops自身には多くの定義済みのオブジェクトの種類があります。こういったあらかじめ用意された骨組みを使って、例えばたった2語をタイプするだけで複雑なオブジェクトを創造することができます。今それをやってみましょう。Mopsがどんな風に使えるかを見てみて下さい。これはレッスンではなくデモです。同じようにタイプしていって下さい。それぞれのステップをおぼえる必要はありません。何が起きるかをよく見ていて下さい。

  Mops トフォルダを開いて下さい。Mops.dicアイコンを捜します。ダブルクリックして起動します。すぐにMopsウインドウが現れます。ウインドウの内容についてはチュートリアルのLesson1で説明します。今はとにかく、"box"とよばれる四角形をメモリ上に作りましょう。

rect box
  (<ENTER> を最後に押すのを忘れないで下さい。)

さて、boxにスクリーン上のどこにどのぐらいの大きさで出現していただくかを教えてあげることにしましょう。Mopsの内部での四角形の骨組みでは、スクリーン上の座標の形式で左上と右下の点として、指示する必要があります。我々は左上に20,10、右下に200,100を選ぶことにします。これらの数字をboxのメモリに入れてやリます。次のようにタイプして下さい。それぞれの数字やコロンの後にスペースを必ずいれて下さい。

20 10 100 50 put: box

 この行はメッセージと呼びます。このメッセージはboxに送られます。スクリーン上にその形を描くためにboxにメッセージを送ります。しかし、まず、それを描くためのウインドウを用意します。ウインドウオブジェクト、"ww"(という名前にします)をメモリ上に作製します。

window ww

 マッキントッシュのウインドウをスクリーン上に描くためには、たくさんの情報を設定する必要があります。たとえばウインドウの4隅の座標やウインドウのタイトルや種類、見えるようにしておくかどうか、クローズボックスをつけるかどうか、などです。マッキントッシュのToolboxはもっと多くの情報が必要ですが、これらは自動的にMopsが補います。Windowクラスを含む、いくつかのMopsのクラスではテスト用にクラスのインスタンスを典型的なパラメータで表示させる機能を持っています。あなたが今作製したウインドウを見るには次のメッセージをタイプします。

test: ww

あなたのスクリーンはこんな風になっているはずです。

 このウインドウwwをリサイズしたりドラッグしたりできるはずです。しかしwwが最前面にあるときにキーをタイプしても何も起きません。キーを押したときにどうするかをwwに教えていないからです。wwをすこし脇に置き、Mopsウインドウをクリックします。さらにコマンドをタイプしていきます。必要ならwwが見えるようにMopsウインドウをリサイズして下さい。

set: ww  draw: box

 set: wwというメッセージはシステムに、描画はwwに行うのだということを知らせます(しかし前面にはもってきません)。boxはwwに描かれているはずです。そして次の図のようになっているでしょう。

 実験が終わったらFileメニューからQuitを選ぶか、次にようにタイプしてMopsを終了します。

 bye
 
 
 

Private データ

 あなたが "box"に割り当てた値は四角形がスクリーンに現れた後も消えずに残っています。Mopsのキーポイントは次のところにあります。もしあなたが新しい四角形"square"を作りそのざひょうにべつの値を入れたとしても、box オブジェクトに入れたパラメータ(boxの対角線上の2つの座標など)には全く影響ないということです。あなたは何百でも別の四角形を、それこそ何百もの別々の名前で、別のサイズで作製することができます。そしてそれぞれの四角形オブジェクトはそのパラメータをプライベート(private)なデータとして保管しておくことができます。オブジェクトとそのプライベートデータは呼び出されるまでメモリ上にあります。
 
 

threaded language

 "draw: box"のようなMopsの文はどちらかといえば単純なものに属します。これによりあらかじめ定義されていた(Mops.dicに入っているのですが)いくつかの別の文章が呼び出されます。"draw: box"という文を解釈するときに、コンピュータ内で一連の動作が起きます。一つの定義が別の定義を呼び出していきます。そして最後に核となる(kernelでの)Mopsの原始的な(低いレベルでの)にたどり着きます。そして、これはのろのろとしたものではなく、Mopsでは最も速く処理ができるマシン語で動作しています。メモリ上の全ての定義に「たどりつく」ということからMopsは"threaded language"(訳者注:糸を手繰るといった意味合いか?)と呼ばれます。
 
 

Mopsの 辞書

 我々がここで議論している「定義」というのは、何かの言語の辞書に書かれた定義と考えてもらっても構いません。そのときの言葉(word)はMops wordと呼ばれます。その定義はQucick Edit エディタのMops Glossaryで見ることができます。
 Mops言語はMops wordの完全で対話的な辞書のことです。Mops.dicを起動するとメモリにMops辞書が読みこまれます。Mopsプログラムを書いた時には、あなたは定義をMopsの言葉でkernel に付け加えたのだという事にあたります(新しい定義はあなたの書いた特定のプログラムだけで動作します。別のプログラムには、また別の基本辞書のコピーを使用します。)。
 細かなことからいちいち書いていかなければならない、ほとんどの手続き型言語と異なり、Mopsは一つのwordで複数のwordの機能をさせることができます。あなたがプログラムを作製するのに伴い、新しいコマンドを作製していくことができる、ということからMopsは拡張型であると言えます。また、2、3のプログラムを書いてみてMops wordを定義すれば、それらはそのまま他のプログラムで再使用できます。これにより開発時間は削減され、Macintosh環境の様々な機能をさらに広げていくことができることでしょう。

 Mopsには定義済みクラスと呼ばれる、既に出来上がったいくつもの作品が付属しています。これからチュートリアルで見て行きますが、一つのクラスは一つのオブジェクトを定義しています。あなたは既に2つのオブジェクト、Class RectとClass Windowを使用しました。Mopsを学ぶ過程で更に他の定義済みクラスを使っていくことでしょう。
 

スタンドアロンアプリケーションを開発する

 Mopsはスタンドアローンな(ダブルクリックして起動することのできる)アプリケーションを作製することができます。ユーザーはそのアプリケーションがどんな言語で書かれているか全く意識することなく使用できます。ユーザーはMopsの辞書やインタプリタには全く触れる必要はありません。これを作製するための方法はチュートリアルにあります。
 

 Mops システムの構成

 Mopsシステムをインストールすれば、Mopsファイルの入ったいくつかのフォルダがあるはずです。
Mops ト  Mops kernel、辞書、定義済みクラスなどの基本的なファイル
Mops source Mopsのソースコードすべて。次のようなフォルダがあります。
-- Nuc source Mopsの核(nucleus)となる部分のソースファイル。このリストとマクロはMcAssemblyフォーマットです。
-- System source Mopsの基本的なクラスと他のコード
-- Toolbox classes Mac Toolboxを呼び出すMopsクラスのソースコード
-- Module source Mopsモジュールのソースコード
-- Asm source Mops 680000アセンブラのソースコード
-- Demo folder チュートリアルで使用するデモプログラムのソースファイル

 System,Toolbox,Demoフォルダのソースコードはドキュメントの目的だけでなく、必要ならば手直しして利用するためのものでもあります。これらのコードを読んでみるとMopsの使い方のマスターに役立つと思います。

 Mops.dic(MosFP.dic)はイントロダクションでも使用しましたが、これからよく使うファイルでしょう。これから利用することになるMops word、定義済みクラスのほとんどが含まれています。
 
 

 爆弾 アイコンについて

  Mopsで実験を進めているうちに、ときどきMacが理解できないコマンドをうっかり実行してしまうこともあるでしょう。多くのそういったエラーはスクリーン上にエラーメッセージを表示させます(それぞれはAppendix Aにあります)。それ以外のものはエラーボックスが表示されてしまいます。これはそのアイコンから「bomb box」ともよばれます。あるいは、もしMacsbugがインストールされていれば、Macsbugに入りその表示がされます。この場合は、G 1E4<retrun>と入力することによりMopsに戻ることができます。Macsbugに再度戻るようでしたら RS<return>でリブートするしかありません。

 リブートした場合はコンピュータをリセットしているので、あなたが行っていた作業のメモリ上のものはすべて失われてしまいます。作業の途中で頻繁に保存を行うことをお薦めします。これはどんなコンピュータで作業を行う場合にもいえることです。

 また、コンピュータが「固まって」しまう場合もあります。キーボードやマウスに反応しなくなる場合です。こんな場合にはリセットしてリブートするしかありません。Macの機種の多くでは子のためのリセットボタンがあります。他の機種では(II siなど)リセットボタンではなくcommand-control-電源キーを同時に押します。もしコンピュータが固まって(フリーズ)しまったらリセットボタンを押すか上記キーを押して下さい。これはMacを一度電源offにしてまたonに下のと同じ効果があります。
 Bomb Boxが現れたり、固まったりしてもがっかりしないで下さい。これはどんな熟練のプログラマでも必ずやってしまうことなのです(私だって山ほどやっています)。それよりも、何が原因であったかを思い起こし、修正するようにして下さい。
 

インターネット、WebでのMopsの情報

 もしインターネットへのアクセスができるのなら(もしまだなら、もうすぐ
でしょう!)comp.lang.forth.macでMopsで関する議論を読む事ができます。ど
うぞ参加してみて下さい。また私はFAQを1月ぐらい毎に投稿しています。最新版があるかどうかをチェックしてから、私にバグ報告するようお願いします。すでに質問されたことのあるものである場合が多いからです。ですが賛辞でしたらいつでもどうぞ。
 Mops Webページは <URL:http://www.netaxs.com/~jayfar/mops.html>にありま
す。ここにはFAQと最新版Mopsへのリンク、Mops関連のプログラムがあります。

 最新版のftpは taygeta.comのディレクトリpub/Forth/Mopsにあります。
 最後に、もし何か問題が起きて私にemailしなければならなくなった時には、かならずお使いのM
opsのバージョンを併記してください。

それではチュートリアルに移りましょう。あなたがMopsで楽しんで下さいますように。