約 1,824,173 件
https://w.atwiki.jp/mopsprogramming/pages/26.html
新しいワードを定義する 【以下【】の中は訳者が付け足したものです。】 前に述べたように、プログラムの構築中にMops辞書にワードを追加することができます。実際、およそMopsプログラミングとは、それをすることなのです。あなたのプログラム内のクラス名、メソッド名、オブジェクト名は、全て、Mopsワードの辞書の一部となります。新たなMopsワードを定義することはまた、あなたが、いくつかの(あるいは多くの)他のForthステートメントの代わりとなる一つの短く単純なワードを定義することによって、自分のルーチンないしサブルーチンを書くということでもあります。このことにより、あなたはプログラムを多くの小さな扱いやすい断片いファクターすることができます。これは、重要なプログラミング上の概念でありテクニックです。 最初の定義実習では、足し算の問題について記号を扱う新ワードを定義することにしましょう。新ワードは "ADD" です。もっとも、Mopsの辞書にないワードなら何を選んでもいいのですが、 注意:現実には、Mops辞書に既に存在している名前のワード(クラスを含む)を定義することを妨げるものは何もありません。実際、これをしてもMopsが不平を言わないことに気づくでしょう!これは、意図的にMopsのデザインの一部とされたものですが、一般的には、あなたがそれによって何か達成したい良いアイディアがある場合でなければ、辞書内にすでにあるワードを再定義することは、良い考えではありません。 新しく定義したいワードの名前が、既に辞書内にないかどうかを確かめるためのもっとも安全な方法は、あなたが調べたい名前に対して、"ティック"コマンドを適用することです。Mopsでは、大抵のForthの場合と同じように、ティックは、アポストロフ( )です。アポストロフ、半角空白、試しているワード名、と打ち込むと、Mopsは辞書内を検索して、そのワードが存在していないか調べます。そのワードが辞書内にあれば、ティックはスタック上に、ある数値を残します。これは、このワードの定義のメモリー内での場所を指します。しかし、そのワードが辞書にない場合には、‘undefined word’ メッセージがスクリーン上に現れます。この場合には、 それは、あなたは晴れてその名前でワードを定義してもよいということを意味します。 window . 5241310 twindow . Error # -13 undefined word twind . ^ Current object TW class MLTEFWIND 新しいMopsワード定義するには、コロン( )、半角空白、新しいワードの名前、一つ以上の空白かタブ、値および/または定義されてるワードを用いたときに実行されるべきコマンドの系列、そして最後にセミコロン(;)をタイプして、新しいワードの定義の終了を示します。この種のMopsの定義は、もっともですが、コロン定義と呼ばれます。( CLASS と M はこれとは別の、もっと特別な目的の定義ワードであることに注意してください。) 新しいワード ADDを定義している例をあげましょう。これは、スタック上の二つの数値の足し算を実行し、結果を表示した後、Mopsプロンプトを次の行の左端に動かします。(ここでは、完備性のためと好ましい習慣の例として示すために、スタックコメントを付けておきます。;これを打ち込むことは必要ではありません。)あなたが打ち込む各行はENTERキーで終わらなければならないことを思い出してください。: ADD ( n1 n2 -- ) + . cr ; + 演算はスタック上に二つの数値がみつけられることを期待しているので、あなたの新ワードを利用するには、二つの数値を打ち込み(これはスタック上に行きます)、それから新ワードを打ち込むことになります。: 2 6 add 8 | リターンスタック 既に見たように、Mopsプログラムは、基本的にはワードとオブジェクトに送られるメッセージ(これがメソッドの実行を引き起します)の系列から成っています。これらのワードとメソッドの定義は、たくさんの他のワードやメッセージを含むことができます。 Mopsが一つのワードまたはメソッドを実行するとき起らなければ成らないことを考えるならば、それは他のワードやメソッドのところに行ってそれらを実行し、それからもと居たところに戻ってくる必要がある、ということに気付くでしょう。この戻るべき場所に何らかの方法で印をつけておく必要があります。これを操作する方法は、第二のスタックを用います。働きはパラメタースタックと似ていますが、リターンスタックと呼ばれます。Mopsは、どこか別の場所で何かを実行しなければ行けないときには、現在の位置をアドレスとしてリターンスタックに保存します。その別の場所において、またどこか別の場所に行かなければならないときには、同じように新しい【現在の】アドレスをリターンスタックに押し込みます。このようにして、ワードやメソッドは他のワードやメソッドを呼び出すことができ、今度はそれらがまた同じようにすることができ、深いところまで降りることができます。 そして、第二のスタックを利用することによって、これらリターンスタック上のリターンアドレス【回帰点アドレス】は、パラメタースタック上のアイテムの邪魔をすることはありません。 注意:Mopsはリターンスタックに、リターンアドレス以外にも、いくつかのその他のアイテムを置きますし、あなたも置くことができます。 しかし、適切にファクターされたオブジェクト指向プログラムでは、一般にリターンスタックを直接に操作する必要はありません。ですから、その操作のやり方は、このチュートリアルではカバーされていません。 通常は、リターンスタックで何が起っているのかについて気にする必要はありません。しかし、エラーが起ったときには、それが起ったときプログラムが何を実行していたのか知ることは、通常、非常に有用です。しかし、Mopsも、上のエラーメッセージで見たように、エラーを報告することによってあなたを助けようとするでしょう。もう一度見てみましょう。: twindow . Error # -13 undefined word twind . ^ Current object TW class MLTEWIND エラーメッセージの最初の行は、起ったエラーの性質を教えています。この場合、未定義ワードエラーでした。二行目は、このエラーを生じたプログラムステートメントを示しています。三行目のキャレット(^)は、そのプログラムステートメント(二行目に表示されています)の中で、Mopsがエラーを発見した場所を指しています。四行目はそこでエラーが起ったオブジェクト(およびそのクラス)を引用しています。この場合は、オブジェクトTW(‘system source’にあるソースファイル‘zFrontEnd’にあります)で、Mopsウィンドウの解釈実行の一部を構成しています。 私達は、エラーが起ったメソッドの名前を表示することはできません。というのは、メソッド名は読める形では格納されていないからです。しかし、それらのワードが起ったプログラムのステートメントを見るだけで、普通は、エラーの場所を突き止めるのに充分です。 名前付き入力引数 Mopsは、パラメタースタック上にデータを格納し、取り出す順序に関する配慮の必要を軽減することによって、物事を少し容易にしてくれます。新しいMopsワードを定義するときにはいつも、Mopsは、そのワードに渡される引数に名前をつけることを許しています。その後には、スタック、ないしデータの順序に気をつかう必要がありません。演算のためにデータが必要なときは、あなたがそれに付けた名前で、データを参照するだけです。 例として、レッスン 3で述べたかけ算-そして-割り算-問題を使います。思い起こせば、演算は次のように表現されました。: 5 * 12 * 50 ------------- 40 これを名前付き入力引数なしで計算することが、前のレッスンでしたことでした。分子の三つの数をかけ算し、それから、割り算の前に分母をスタックに置かなければなりませんでした。名前付き入力引数で計算の実行がどのように単純化されるかを見てみましょう。: FORMULA { denom n1 n2 n3 -- solution } n1 n2 n3 * * denom / ; 名前付き入力引数の魔法は、中括弧({ と }。カーリーブラケット【捩れ括弧?】ともいいます)の中に置きます。シンタックスは意図してスタックコメントに似せてあります。というのは、それは実際一種のスタック記述だからです。ですからこの場合、ワード FORMULA が実行されるときにはいつも、次のようになります。: 40 5 12 50 formula . 75 最初に起ることは、値がスタックから取られ(取り除かれ)、専用の記憶領域に置かれます。そこでは、中括弧内の名前に、スタック上に置かれたのと同じ順序で値が結びつけられています。ひとたびそれが起れば、その順序はもう重要ではありません。計算において値を満たすのには、その名前が用いられるのです。【ここだけ読むと、名前付き入力引数は専用フレームに格納されるかのように読めますが、PowerMopsでは実際には、すべてレジスター変数です。また利用できるレジスタの個数に限りがあるため、名前付き引数は、次に説明される局所変数と会わせて、最大で9個までという上限があります。】 しかし、‘solution’パラメターは、実際にはコメントであることに注意してください。 "--" と "}" の間にあるものは、みな、コメントとみなされます。このコメント領域は、通常のスタックコメントとまさに同じように、あなたの定義がスタック上に残すものを示すために用いるべきです。 あなたが名前付き入力引数に割り当てた名前と値は、そのコロン定義内でのみ有効であることを心に留めておく事は重要です。別のコロン定義で、同じ、あるいは違う値について、同じ名前を用いることには何の障害もありません。 名前付き入力引数は、コロン定義の中で値を調整する事ができる上で、非常に強力な方法です。例えば、次の式を考えてみましょう。: a^2 + b^2 コンピュータは一回に一つの自乗しか計算できないのですから、二つの自乗を足し算できるようになる前に、二番目の自乗を計算している間、先に行ったの自乗の結果を保管しておく必要があります。上の式に同値なワードとして、次のようにしても良いでしょう: FORMULA1 { a b -- solution } a a * - a b b * a + . cr ; "矢印"(gazinta【たぶん、"goes into"の俗語だろうと思います。】)演算子、- は現在のスタック上の値(aの自乗の結果)を、名前付き引数 a に格納します。これは、この定義の実行開始の瞬間にスタックから取られた元々の a にある値に上書きされます。実行の終わり近くで、a は、b かける b の結果に加算されるために、再び呼び出されます。名前付き入力引数なしで同じ式を解くには、いくつかのスタック操作が必要であり、これには、エキスパートでさえも、ときどきしくじる事があります。 ついでながら、名前付き入力引数として格納された数値に対して実行できる演算操作は他にもあります。そこにある数値に数を加算したり、あるいはそこから数を減算したりすることができます。++ および-- 演算を使います。例えば、 10 ++ denom とすると、コロン定義内で、denomという名前の仮定的な名前付き入力引数に格納されている値に、10が足し算されます。 局所変数 ついでに、局所変数と呼ばれる重要な概念についても紹介しておきましょう。これもまた、一つのコロン定義の範囲内で中括弧の中に現れるものですが、前とは違って、そのような定義内で生じ得る中間的な結果に名前を割り当てるものです。局所変数はバックスラッシュの後に宣言します。例えば、次の式を使いましょう。: ( a + b - 3c ) ---------------- ( b + 2c ) ワード定義は、次のようにできるでしょう。: FORMULA2 { a b c \ num den -- result } a b + 3 c * - - num 2 c * b + - den num den / ; この例では、中括弧内のa, b,および cは、名前付き入力引数で、スタック上の値を取ります。バックスラッシュ(\)後で "--"より前の名前が局所変数で、 定義内で活用できます。この例では、分子と分母は別々に計算され、それぞれの局所変数に格納(- )されます。このとき、局所変数は結果を生み出す割り算のために適切な順序で再び呼び出されます。 注意:局所変数を利用する前に初期化する必要はありません。局所変数は定義のはじめにゼロで初期化されていると措定することができます。 チュートリアル目次へ 前へ レッスン9 次へ レッスン11
https://w.atwiki.jp/mopsprogramming/pages/47.html
ここでいうワード(word)は、Mops/Forthのプログラムを構成する基礎的な単位です。計算機科学でいうword --- データ記憶・処理の単位、例えば、32ビットなど --- とは全く意味が異なります。 最も狭い意味でいえば、ワードとは、他のプログラミング言語でいう、関数(Function)やプロシーヂャー(Procedure)、あるいは、サブルーチン(subroutine)などに当たるものの総称です。 しかし、データ処理等の「動作」のある機能的単位という観点から限定しても、Mops/Forthのワードには、普通に関数や手続として想定されるものには当てはまらないようなものもの含まれています。それは、新しくワード(関数、手続等)を定義するに用いられるワードです。例えば、コロン" "やセミコロン";"は、単なる記号のように見えるかも知れませんが、実際にはどちらも固有の動作を持つワードです。変数の宣言に用いられる文字列("Variable"や"Value")もまたワードです。Mops固有のものとしては、クラスやメソッドを定義する際に用いる「記号」もワードに他なりません。これらは、開発環境内部的な働きをするワードといえます。また、スタック上のアイテムを並替・コピー・削除するスタック操作子もまたワードです。 私的な見解ですが、メッセージ(メソッド名)は関数に当たるような意味でワードと考えるのは難しいように思います。というのは、本来、メッセージは何らかのオブジェクトとバインドしないことには確定した意味(動作)を持たないからです。Mopsでは「オブジェクトとバインドされたメッセージ」がワードであると考えることもできるかも知れません。強いていえばメッセージは一種のprefixといえるかも知れません。 少し広げると、変数もワードです。実際、変数にはそれ固有の動作があり、単なる格納庫とはいえません。Mopsとして考えると、インスタンスやクラスもワードになります。 この定義では、上で述べたメッセージも含めて、Mops/Forthでは何らかの固有の働き(意味)を持つ文字列は、ほとんど全てワードに当たります。ワードでないのは区切り文字くらいのものでしょう。 最も広い意味としては、「空白文字またはテキスト境界で区切られた、非空白文字からなる一文字以上の文字列」をワードとする、という定義もあります。これでは、コメントの中に書かれた英単語もワードに含まれてしまいますが、大きく網をかけるという趣旨でしょう。通常は、この中でプログラムにとって意味があるものとして書かれたもの(つまり、コメントの内容としてのワードは除く)が、Mops/Forthワードといわれます。 Mops/Forthワードには既定義と未定義の別があります。未定義ワードを呼び出そうとすると、"undefined word"エラー(-13)が表示されます。 関連項目: コード書記法の一般原則 スタック操作子 四則演算 ワード(関数)を定義する トップページへ 目次へ
https://w.atwiki.jp/mopsprogramming/pages/21.html
クラス–オブジェクト関係を写し込む 【以下、"空白"は全て"半角空白"を意味します。なお、以下【】の中は訳者が付け足したものです。】 Mopsのようなオブジェクト指向言語では、 前レッスンの会計士のアナロジーで描写したものと同じ種類の関係を核としてプログラムを構築します。 クラス定義はプログラムの構造において中心的な役割を果たします。 ですから、Mopsプログラムを計画する初期の段階で最も重要なのは、 あなたのプログラムにおける主要なオブジェクト(アクター)が何をするのかを見定めることです。 Mac OSは、非常に多くの異なる現実世界の対象;預金通帳、アーチストのカンバス、カレンダー【等】を スクリーン上のメタファーによって再創造することができるのですから、Mopsオブジェクトのクラスとしては、 現実世界の道具に似た振る舞いを持つものにするのが最善といえます。 そのプログラムの諸クラスが何になるのかをひとたび決めたなら、それらのクラスとメソッドを定義して、ブログラムを書き始めるべきときです。 それから、それらクラスのオブジェクトを生成します。最後に、プログラムを動かすそれらオブジェクトに対するメッセージを書きます。 まず、スクリーン上に長方形オブジェクトを描画することができるクラスを定義して、クラス–オブジェクト関係をMopsプログラムに適用してみましょう。 同時に、それはMopsプログラムが実際にどう見えるのかについての案内ともなるでしょう。 プログラムの行の並べ方、段落の付け方、空白の置き方、大文字化などの物理的な構造に特に注意してください。 Mopsは、あなたがプログラムをどんな見栄えにするのかについては、全く頓着しませんが、 以下に述べるやり方は、あなたがデバッグや拡張のためにコードを印刷したものを読むときの助けとなるでしょう。 これに関連する話題についての深い議論としては、レファレンスパートの3,5および6章も参照してください。 クラスを定義する 会計士クラスメタファーのところで気付いたかもしれませんが、各クラスは、 そのクラスのオブジェクトが、活動のために呼び出されたときに常に従う一連の規則、ないし手続となるものによって定義されていました。 このとき、クラスを定義することは、それらの規則や手続:メソッドの確立を含意します。 大部分のクラスは、また、そのクラスのオブジェクトに結びつけられる情報(データ)も持っています。 例えば、家計会計士のクラスは、そのクラスのどの会計士も、その仕事に対して報酬を受けるべきことを命ずることができます。 すべての家計会計士(実例として、ジョンとパーシバル)は、その時間給に当たる数字を持っています。 クラス定義は単に、汝、時給を持たむと述べるのみです。 オブジェクトが生成されるときに、その時給率はその変数に組込まれます。 重要なのは、ジョンとパーシバルは全く異なる時給を持ちうるということです。 彼らは自分自身のデータを、同じクラスの他のオブジェクトから切り離して、保管するからです。 そのメソッドの一つが、その時給率を取りだし、それにあなたの税務に費やした時間をかけ算して、 あなたに請求書を送ります。 さて、MopsクラスであるRectの構築がどのようなものであるのかを見てみましょう。 これは、長方形オブジェクトを生成するためのすべての手続を定義することになるでしょう。 Carbon環境では、長方形はスクリーン上の二つの点で定義されます。:その長方形の左上頂点と右下頂点の位置です。【Mopsでは現状では関係ありませんが、OS X CarbonのHIViewで用いられる長方形であるNSRectangleでは左上頂点と縦横のサイズによって定義されます】 言い換えれば、スクリーン上の長方形のどのインスタンスとしても、Rectクラスのオブジェクトは、これら二つの変数を数値で埋める必要があるということです。そのため、これらの変数はインスタンス変数(instance variables (略してivars))と呼ばれます。 これらは、オブジェクトの定義の中にある格納場所であって、 長方形を描画できるようになる前に無くてはならない必須データ(二つの点)をおくためのものです。 この時点までで、クラス定義は次のようになります。: class RECT super{ object } point TopReft point BotRight いくつかのことに気付きます。 まず第一に、クラス定義の始まりが、 class("コロン–クラス"と読みます)となっていて、 コロン" "と"class"の間に空白はありません。 classとそのクラスの名前との間には少なくとも一つの空白またはタブ文字があります。 私達はRECTを目立つように大文字にしました。まさにそれがここで定義されているのですから。 しかし、これは必要なわけではありません。 Mopsでは大文字と小文字は同じものとして扱われるからです。 あなたの好みに応じて、どんなやり方をしてもかまいません。 クラスの名前と同じ行に、私達の長方形クラスがそこから派生するスーパークラスへの参照があります。 この参照の形式は、super{というワード("super"と左中括弧との間には空白はありません)で始まり、 次にスーパークラスの名前、そして}となっています。 これら【スーパークラス名も含めた】三つの要素は、すべてのMopsワードと同様、空白またはタブ文字で区切られます。 一つのクラスが一つより多いスーパークラスを持つこともできることを、後で見るでしょう。 これは多重継承として知られています。 これについて、ここでは細部には立ち入りませんが、 ひとことだけいうと、もし複数のスーパークラスが存在するならば、}の前にそれらの名前を順番に 空白またはタブ文字で区切って並べることになります。 この例ではスーパークラス名はObjectですが、 Mopsシステムでのオブジェクトという言葉の一般的な用法と混同しないようにしてください。 オブジェクトという言葉は、一般には、全オブジェクトに一般的に言及するものです。 この特別な場合においては、Objectはひとつのクラスです。 これは少しややこしく思うかもしれませんが、 実際には、私達がこの特殊なクラスを"Object"と名付けたのは、まさに、 私達の"オブジェクト"という語の一般的な用法のゆえなのです。 Mopsにおけるクラスは、すべて、継承先を辿っていくとクラスObjectに至ることができるからです。 ゆえに、クラスObjectはすべてのMopsオブジェクトにとって適切な振る舞いを定義しています。 これが、Objectという名前がこのクラスに適切な理由なのです。 ですから、継承によって、クラスRectはクラスObjectで定義されたすべてのメソッドを利用することができます。 Objectクラスのために定義されているメソッドに関心がある場合は、ソースコードリストを覗いてみてください( ‘PPC source’フォルダの"qpClass"ファイルにあります。)【クラスレファレンスにも説明があります。】 インスタンス変数【宣言】は、このクラスから生成されたオブジェクトのデータエリアにメモリースペースを確保するよう、Mopsに対して告げます。 確保されるべきスペースの量は、インスタンス変数の特性によって決まります。インスタンス変数は、それ自身、別のクラスで定義されています。 ここでは、インスタンス変数(ivar)はTopLeftとBotRightという名前で、 どちらも、クラスPointに属しています。 もしもクラスPointがもっと前に定義されていなかったなら、 Rectクラスでインスタンス変数TopLeftおよびBotRightを生成することはできないでしょう。 運良く、クラスPointは、Mopsの数多くの既定義クラスの一つです。 注意:手続的言語ファンからみると、Mopsのオブジェクト指向を理解するときの鍵は、 次のいくつかのステップにおいて辞書内のスレッドをたどるとき、直接の実行のステップを見ているのではないということです。 むしろ、そのプログラムの後の段階でメッセージが送られるときに初めて解放される一種の潜在エネルギーとして メモリー内に止まっているであろうフレームワークを、あなたは構築しているのです。 クラスRect内に生成されるPointオブジェクト(TopLeftとBotRight) のための規則と手続が何であるかを理解するために、 PointクラスのMopsソースコードをみることもできます(‘ToolBox classes»フォルダの "zQD"ソースファイルにあります)。 クラス定義は次のようになっているはずです。: class POINT super{ object } record { int Y \ Vertical coordinate int X \ Holizontal coordinate } … ;class すぐ後で全部説明しますが、主要な留意点は、まず第一に、このクラスそれ自体が、 さらに二つのInt(Integer 整数)クラスのインスタンス変数XおよびYを利用しているということです。 これらは、Pointクラスの任意のオブジェクトの内部にあるデータ領域を特定しています。 言い換えると、クラスPointから生成されたどんなオブジェクトも、 データのために確保された小領域(セル)を二つの整数で埋める必要があるということです。 Pointクラスがこのように設計されたのは、 Pointオブジェクト(インスタンス)が生成されるときにはいつも、 点の座標を表現する二つの値は対として扱われると便利だからです。 また、このプログラムを解説する(documenting)一つの方法として、簡単な英語の注をつけ加えることをはじめたことにも注意してください。 Mopsでコメントを特定する方法は三つあります: ( この種の コメントの 終わりは ) \ これはもうひとつのコメントで、この行の終わりまで続きます (* この種のコメントは 複数行に渡ることができ、 (* 入れ子にもできます *) *) ( 、 \ 、 (* および *) はMopsワードであって、空白文字を続けないといけないことに注意してください。 ですから、 (これでは コメントに なりません) Mopsは"(これでは"をワードとして認識しようとして、 この行の残りをコメントとして扱いません。 あなたは、おそらく、undefined wordエラーメッセージを受けるでしょう。 Pointクラスの残りのステートメントに、少し戻りましょう。 まず、私達は、また、しかし今度はIntクラスの定義を捜さなければなりません。 Pointクラスのデータは、Intクラスの特性をもったインスタンス変数 YおよびXから成っているからです。 クラスIntは、‘Mops ƒ’フォルダの "pStruct"ファイルで定義されています。 class Int super{ object } 2 bytes data m PUT inline{ ^base w!} ;m … ;class クラス Int もMopsの既定義クラスの一つです。 それは、まずはじめに、そのスーパークラスを、Mopsの多くのクラスがそうですが、Object として宣言しています。 次に、整数オブジェクトが生成される毎に、2バイト(16ビット)データが各値のためにとりおかれるべきことを宣言しています。 三行目は、このクラスのメソッドです( mで始まり;mで終わります)。 これらのメソッド定義内のメッセージは、ある整数を特別なメモリーエリアに格納します。 (このメソッド定義内の細かいことについては、いまのところ気にしないでください。) Pointクラスの定義に戻って、九番目のメソッドを見ましょう。: m PUT ( x y -- ) put Y put X ;m これは、XおよびY座標の両方をメモリーに格納するための、Mopsに対する一つの命令です。 ですから、 インスタンス変数(私達の長方形クラスのTopLeftとBotRight)の一つが、X,Y座標にあたる二つの数が与えられれば、 全座標が一つのPUT メッセージで格納されます。 言い換えれば、Pointオブジェクトに対するPUT メッセージは、スタック上に二つの数(XとY)を必要とします。 次に、Rectクラスの定義には二つのメソッドがあります。: class RECT super{ object } point TopLeft point BotRight m PUT ( l t r b -- ) put BotRight put TopLeft ;m m DRAW ^base FrameRect ;m ;class 【原文では、スタックコメントが、メソッド定義の同じ行の最後に付いていて、 実際のソースコードでもそうなっていますが、 スタックコメントは、メソッド名と内容コードの間に付けるのが全体としては標準的なようなので、勝手に変えてあります。】 スタック注釈に細かく書いたように、 第一のメソッドPUT は、オブジェクトがそれを実行する前に、スタック上に四つの整数を必要とします (ここでは文字‘l’, ‘t’, ‘r’, ‘b’で表されています)。 最初の二つの整数(スタック上の上二つ)は、‘put BotRight’メッセージが、BotRightのクラス -- この場合、クラスPointですが -- に、このPUT メソッドの定義をみつけると直ちに、オブジェクトのBotRightで確保された小領域に格納されます。 次の二つの整数は、RectクラスのPUT メソッド内の‘put TopLeft’メッセージの結果として、 オブジェクトのTopLeft小領域におかれます。 言い方を変えると、RectクラスのオブジェクトがPUT セレクターを含むメッセージを受け取ったときには、 そのオブジェクトは、それ自身のクラスの中に対応するメソッド定義を捜します。 そのメソッドが、別のクラスに属するオブジェクトに、自分でメッセージを送ります。 そして、クラスとオブジェクトのつながりの遡行は、純粋にMopsワードで定義されているメソッド(IntクラスのPUT メソッドのような)に到達するまで続きます。 一連のメッセージによって執られるこれらすべての動作は、メッセージを受けたそのRectオブジェクトのプライベートデータにしか影響を与えません。 私達の長方形クラスの第二のメソッドDRAW は、FrameRectという名前のカーボンフレームワークルーチン(QuickDrawグラフィックライブラリに属しています)を呼び出して、描画されるべきオブジェクトのデータ領域に現在おかれている座標にしたがって長方形を描きます。 もちろん、そのデータはFrameRectが予定している適切な順序になっていなければなりません。 FrameRectおよび他のCarbonフレームワーク呼出しの大部分は、オブジェクトのデータのアドレスを要求します。 これは、DARW メソッドにあるワード^BASEで得られます。 そしてこのアドレスは、Carbonフレームワークコールに渡されるのです。 しかし、私達がこれまでにやった状態のままでは、DRAW メソッドを呼んでも、うまく動きません。 これは、私達のTopLeftとBotRightの宣言のやり方では、 それらは正規のMopsオブジェクトになってしまうからです。 これが問題な理由は、Mopsオブジェクトは、そのオブジェクトのメモリー内の場所の始まりの部分に、追加的な情報を持っているからです。 この情報は、ある種の事柄をうまくやるためのもので、そのオブジェクトのクラスに関するものを含んでいます。 しかし、Carbonフレームワークは、Mopsオブジェクトについて何も知る必要はありません。 TopLeftとBotRightに当たるそれぞれ2バイト、余分なバイトを含まないデータだけが期待されています。 したがって、この余分な情報を切り落とす方法が必要となりますが、これは‘record{ ... }’を用いることで、次のように行います。: class RECT super{ object } record { point TopLeft point BotRight } m PUT ( l t r b -- ) put BotRight put TopLeft ;m m DRAW ^base FrameRect ;m ;class 注意:‘record{ ... }’という形、または、‘record 構造体名(オプション) { ... }’という形のどちらかで利用できます。 レコード(record)の一部として宣言されたインスタンス変数は、どれも追加的な情報を持ちません。 これによって(予想されることですが)、これらの特定インスタンス変数については、行いうることが一定の制限を受けます。 Mopsが追加的情報を利用できなくなるからです。 しかし、後で分かるように、これはあまり深刻な制約にはなりません。 最後に、クラス定義を終わらせるために;class("セミコロン クラス"と読みます)を忘れないで下さい。 最後に一言:クラス定義の形(と、それに関するコード)は、少なくとも一つの空白文字かタブ文字でMopsワードを区切っていれば、 好きなようにすることができます。 私達がこのマニュアルとMopsソースコードで用いたフォーマッティングは、大抵の人にとって、全く読みやすいものだと思いますので、 これと似たようにすることをお勧めします。 空白やコメントをたくさん使うことは、あなたのコードを読んで理解しなければならない他の人の助けになるだろうという意味では、 いつも良い考えであるといえます(この件についてはあなた自身の助けにもなります。何週間かたって、もうそれが記憶に新しいものではなくなってしまったときには。)。 しかし、結局は、あなたの選択次第なのです。 チュートリアル目次へ 前へ レッスン4 次へ レッスン6
https://w.atwiki.jp/blackops2_cod/pages/35.html
リンク 公式サイト 情報・ニュース(国内) CODシリーズwiki一覧 公式サイト 北米公式サイト http //www.callofduty.com/blackops2/ 日本語版公式サイト http //www.extremeedges.jp/callofduty/blackops2/ 開発元サイト http //www.treyarch.com/ 情報・ニュース(国内) 2chスレッド 現行スレ検索 2ch PC版 テンプレまとめサイト http //www.geocities.jp/gensi/ doope! 関連記事一覧 http //doope.jp/tag/call-of-duty-black-ops/ EAA!!関連記事一覧 http //fpsjp.net/archives/category/codbo2 Game*Spark 関連記事一覧 http //gs.inside-games.jp/news/search_result.html?q=Black+Ops2 CODシリーズwiki一覧 Modern Warfare World at War Modern Warfare 2 Black Ops Modern Warfare 3 Ghosts Advanced Warfare Black Ops 3 Infinite Warfare World War II Black Ops 4
https://w.atwiki.jp/linuxwotamesu/pages/23.html
ここは、CentOS 6.2 向け仮想マシンの情報。 オペレーティングシステムは「Linux」で、バージョンは「RedHat」とした。 ストレージ容量は 5GB とし、Solid-state Drive にチェックした。VMware Player で 3GB としたら、CentOS のインストーラに少ないと怒られた。 割り当てメモリは 1GB とした。 ホストPCが VT 未サポートなので、アクセラレーションの仮想化支援機構はすべてチェックを外した。 オーディオ、USBは無効化した。 シリアルポートは1を有効とし、ポートモードは「ホストにパイプ」とした。 ネットワークはアダプタ2を有効とし、割り当てを「ホストオンリーアダプタ」とした。 イントールは、仮想マシンの CD-ROM にダウンロードしておいた CentOS-6.2-i386-minimal.iso を設定して、起動する。 すると、自動でインストールが開始される(終わると、仮想マシンの CD-ROM からはイジェクトされている)。 途中の選択肢での選択は以下。 ディスクチェック→スキップ インストール→Basic ディスクの内容が消えるよ?→消してよし インストール完了時のディスク消費は以下のような感じ。1GBどこいった? 追記 スワップ領域となっていた。 [root@vbox01 ~]# df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/mapper/vg_vbox01-lv_root 2644760 553380 1957032 23% / tmpfs 515468 0 515468 0% /dev/shm /dev/sda1 495844 38101 432143 9% /boot [root@vbox01 ~]# ここで編集
https://w.atwiki.jp/xlinkkaimgspw/pages/13.html
対戦時のマナー 装備について テクニック・小技 対戦時のマナー ホストが禁止としている行動をしない。オートエイム(AAと略される事がある)、爆発物系(ミサイル、グレネード)、盾、CQC、スニーキングスーツなど。 人数差がある場合は誰かが待機する。 トラップを仕掛けまくらない。自チームにも迷惑が掛かる事がある他、敵チームが不快になることがあるため。 CQCばっかりをしない。部屋が荒れる可能性があるため。 スタングレネードは控える。自チーム 敵チームにかなりの迷惑が掛かる。 装備について スニーキングスーツ足音がしないためサラウンドインジゲータで位置予測をされない。しかし武器の所持弾数が少ない。 バトル所持弾数が多く防御力が他の装備と比べ、高い。 野獣服系(ミラー、アマンダ、Tシャツ系も含む)カモフラージュ率がある程度あるものなら相手から見て半透明になる。所持弾数は普通スニーキングとバトルの中間位。 ネイキッド所持弾数が多く少し足がはやくなるが防御力が他の装備と比べ、少し低い。 水着足が早くなるが所持弾数が少なく防御力も低い 対戦専用ユニフォーム基本的に野獣服と同じだがカモフラージュ率がある程度あっても相手から見て半透明にならない。NVGをつけていても顔面にゴーグルが付かない。女性は女性捕虜しか着用できない。 テクニック・小技 基本テクニック壁待ち 壁や物などに隠れて頭に照準を合わせておき、相手が警戒なく突っ込んできたら出てきて撃つ。 設置を少しだけはやくする しゃがみ状態から設置すると若干早く設置が可能。 しゃがみ撃ち 蟹移動するだけでなく時々しゃがみながら撃つ事でHSされにくくなる。 ダンボールを利用した小技マガジンを置き、ダンボールをドロップするとマガジンが隠せる。 ダンボールを足場にすると普段は攻撃できないところから攻撃できる。 ダンボールを被って止まるとロックされない。
https://w.atwiki.jp/tyrant_unleashed/pages/88.html
Discount football jerseys for sale wholesale china http //www.gobowl2.com/close.html http //www.gobowl2.com/close.html -- (http //www.gobowl2.com/close.html) 2014-12-12 15 33 38 Wholesale authentic jerseys,cheap sports Jerseys from china with free shipping.Wholesale now save more money. http //smokefreebowling.com/news.html http //smokefreebowling.com/news.html -- (http //smokefreebowling.com/news.html) 2015-01-02 20 26 23
https://w.atwiki.jp/improper_code/pages/64.html
Open PS2 Loader ※内臓HDD(旧型のみ)、外付けHDD(USB接続)、ネットワーク上から ディスクイメージを起動できる。 ※NTFS/FAT32ならフォーマットはしなくても大丈夫かも。 ※内臓HDDにインストする場合は、HDL/HDA上から行うか PCに接続又はネットワークで接続し専用のソフトで行う。 ※USB、ネットワーク上にインストールする場合は、専用のソフトが必要。 設定方法は ココ を参照。 Open PS2 Loaderダウンロード v0.8 で追加された機能の説明ISO形式でのゲーム起動 VMC(仮想メモリーカード)HDDで利用する場合のパーティション作成方法 カバーイラスト表示 PS2及びPCのネットワーク設定PC側の設定 フォルダの共有設定 PS2側の設定 ゲームのインストール(ゲームをUSBかネットワークで起動する場合)USBeXtreme Client Software (MS-DOS) USBeXtreme Client Software GUI ゲームのインストール(内臓HDDからゲームを起動する場合)PS2HDDをPCに接続してインストール ネットワーク上からPS2HDDにゲームをインストール PS3で「Open PS2 Loader」を使用する為の手順 ダウンロード ファイル倉庫 v0.8 で追加された機能の説明 (「何となく翻訳」なので、間違いがあるかも…) 公式マニュアル OPL v0.8 User Guides (英語) ISO形式でのゲーム起動 ※(v0.8から追加) ISO形式のゲーム起動に対応しているのは「USB」と「ネットワーク」で、HDDには対応していないので注意。 ファイル名は「game-code.name.iso」にリネーム。「game-code」はディスクをPCで読み込んで中身を開き、「SLPS_XXX.XX」というファイルが「game-code」になる。または、ケースに書いてある型番の下二桁をドットで区切る(ただしゲームによっては「game-code」と異なる場合がある)。 「name」は自分の分り易いように入力。 例)SLPS_257.16.DIGIMON.iso (デジモンセイバーズアナザーミッション) 注意点正)SLPS_257.16.DIGIMON.iso 誤)SLPS-257.16.DIGIMON.ISO 配置場所はルート上に「CD」と「DVD」フォルダを作成し、媒体形式に合うフォルダに格納する。 VMC(仮想メモリーカード) ※(v0.8から追加) VMCとはヴァーチャルメモリーカードの略称。 メモリーカードを仮想的に扱う事で、本体にメモリーカードを挿さなくても保存可能。VMCの保存場所は「HDD」、「USB」、「ネットワーク」上に作成できる。 VMCの使用方法「HDD」で使用する場合は、予め「OPL」というパーティションを作成する必要がある。 OPLを起動しゲームリストを表示させ、VMCを利用したいタイトルを選んで「▲」を押す。 「VMC Slot 1」までカーソルを移動させ、「 not set 」で「×」を押す。 「Name」で「×」を押しVMCの名前を入力。(他のゲームと併用したい場合は同じ名前を指定する) 「Create」で「×」を押すとVMCが作成される。 「○」ボタンで戻り設定を保存すれば、今後設定したゲームはVMC上からセーブデータを利用できるようになる。 作成されたVMCデータは「VMC」フォルダの中にBIN形式で保存される。 VMCをマウントできるファイラーなどを使えば、セーブデータの移動などが行える。(ただし不安定で破損データとなる場合があるので注意) HDDで利用する場合のパーティション作成方法 uLaunchELFでのパーティション作成方法 メモカブート等で「uLaunchELF」を起動する。 「FileBrowser」=>「MISC」=>「HDDmanager」の順で選択。 「HDDmanager」が起動したら「R1」を押してメニューを表示させる。 「Create」を選択し「OPL」と入力して決定。 パーティションのサイズを聞かれるので128MB~128GBの間から選ぶ。 パーティションのリストに「+OPL」が追加されていれば成功。 カバーイラスト表示 ※(v0.8から追加) ゲームリスト上に「アイコン」、「カバーイラスト」、「背景画像」を表示可能になった。 ファイル名と画像サイズ アイコン ファイル名 「game-code_ICO」 画像サイズ 64x64 カバーイラスト ファイル名 「game-code_COV」 画像サイズ 140x200 背景画像 ファイル名 「game-code_BG」 画像サイズ(両用) 640x480 画像サイズ(NTSC専用) 640x448 画像サイズ(PAL専用) 640x512 ※画像形式はJPEG/PNGに対応。 ※使用するスキンによって、背景画像が表示されない場合がある。 配置場所HDDの場合はVMCで作成したパーティション「OPL」の中に「ART」フォルダを作成。 USB及びネットワークではルート上に「ART」フォルダを作成。 「ART」フォルダに画像を格納する。 設定OPLを起動し「Display Settings」から「Enable Cover Art」を「on」にすればカバーイラストが利用可能となる。 PS2及びPCのネットワーク設定 ネットワークからの設定方法を簡単に説明。 ※古いバージョンでの設定方法なので新バージョンと違うかも。 PC側の設定 自分の環境は 「パソコン(XP sp3)」―「クロスケーブル」―「PS2」 ネットワーク設定 「コントロールパネル」から「ネットワークの接続」を選択。 接続しているネットワークを右クリック→「プロパティ」を選択。 全般タブの「この接続は次の項目を使用します」から「インターネットプロトコル(TCP/IP)」をクリックし、「プロパティ」を押す。 「次のアドレスを使う」にチェックをいれる IPアドレス 192.168.0.11 サブネットマスク 255.255.255.0 デフォルトゲートウェイ 192.168.0.1 上記のように入力する。 あとは決定したら「ネットワークの接続」から接続する。 XP標準のファイヤーウォールは、予め無効にしておくこと。 フォルダの共有設定 次にフォルダの共有を行う。 ゲームをインストールしたフォルダを右クリック→「プロパティ」を選択。 「ネットワーク上での共有とセキュリティ」の「ネットワーク上でこのフォルダを共有する」にチェックを入れる。 共有名の欄に「PS2SMB」と入力し「OK」を押せば、フォルダの共有が完了する。 PS2側の設定 「Open PS2 Loader」を起動させ、「Settings」→「Network confg」を選択。 (決定は×ボタン、○でキャンセル・戻る) PCのIPアドレスとPS2のIPアドレスを確認して、違っていたら修正。 修正したら「Settings」→「Save changes」を選択し、設定を保存する。 最初のメニューに戻り、「Network Games」→「Start network」を選択。 正常にネットワークが構築できていれば、数秒後に共有したフォルダ内のゲームが表示される。 ゲームのインストール(ゲームをUSBかネットワークで起動する場合) 元は「 USBeXtreme 」用のツールDOS版とGUI版は環境などで使い分ける。 使いやすい方でOK。 ※他にも「USBUtil」というツールもある。 USBeXtreme Client Software (MS-DOS) ダウンロード ul_install.exe(インストールツール) ul_format.exe(フォーマットツール) コマンドプロンプトを起動し、実行ファイルがあるフォルダまで移動する。一々コマンドを入力してフォルダ移動するのが面倒な場合。コマンドプロンプトのショートカットを作成し右クリックでプロパティを開く。 作業フォルダをツールの入ったフォルダに書き換える。 ショートカットからコマンドプロンプトを起動する。 ul_install [①CD/DVD] [②インストール先] [③ゲーム名] [④ディスクの種類] ①がCD/DVDドライブ。 ②がインストールするHDDのドライブ名。 ③ゲームタイトルを任意で指定。(半角英数) ④ディスクの種類はCDかDVDのどちらかを指定する。例:ul_install D E GAME_TITLE DVD ※フォルダ指定はできない。かならずドライブのルートにインストールされる。 HDDのフォーマット ul_format [ドライブ名] Format ※Windowsで普通にフォーマットしても認識されない場合に使う。 たぶん必要ないと思う。 USBeXtreme Client Software GUI ダウンロード ゲームのインストール「Games Installer」タブにする。 「CD/DVD ROM Drive」インストール元のCD/DVDドライブを選択。 「Media Type」インストールするゲームのメディアの種類(CDかDVD)を選択。 「Hard Drive」インストール先のHDDを選択。 「Game Name」インストールするゲームのタイトル(半角英数)を入力。 「Start」を押すとインストールが開始される。 「Game Instaled List」にはHDD内にインストール済みのタイトルが表示される。右クリックで削除・リネーム・コピーが行える。 ※フォルダ指定はできない。かならずドライブのルートにインストールされる。 HDDのフォーマット「Disk Format」タブにする。 「Format...」を押す。 フォーマットしたいHDDを選択し「OK」を押せば開始される。 ※Windowsで普通にフォーマットしても認識されない場合に使う。 たぶん必要ないと思う。 ゲームのインストール(内臓HDDからゲームを起動する場合) PS2HDDをPCに接続してインストール ※ネットワークよりもインストール速度が速い。 ※一々PS2からHDDを外さないといけない。(リムーバルブ化すると楽になる。) 三代目HDLあぷろだ から「WinHIIP_V1.7.6 日本語化Ver」をダウンロードして、適当な場所に解凍しておく。 PS2からHDDを取り外してPCに接続する。IDE=>USB変換機があれば便利。 「WinHIIP」を起動して「ドライブの選択」のボタンを押す。 正常にPS2HDDが認識されていれば「Drive 1 (PS2) ~」と表示されるので、それを選択する。「Drive 0(PC):~」はPC用なので、必ず「(PS2)」となっているものを選ぶ。 既に他のゲームがインストールされていれば、リストに一覧で表示される。 ゲームをインストールする場合は「イメージから追加」のボタンを押す。 ISO形式が既にある場合は「Image File(s)」を選択し、「イメージの追加」でインストールしたいゲームイメージを選択する。 複数一括で登録でき、「開始」でインストールが始まる。 そうでない場合はゲームディスクが入ったCD/DVDドライブを選択し、ソフト名を入力し「完了」を押せばインストールが始まる。 最後にインストールしたゲームがリストに表示されているか確認すれば完了だ。 ネットワーク上からPS2HDDにゲームをインストール ※方法は幾つかあるが、今回は「hdl_dumb」を使用。 ※PS2からHDDを取り出さなくてもいい。 ※インストール速度は遅い。 三代目HDLあぷろだ から「hdl_dumx-0.9.0」をダウンロードして、適当な場所に解凍しておく。 PS2上でOPLを起動し「HDL Server」を起動させる。 PC上で「hdl_dumb」を起動し、「Networking server,at」のチェックを入れる。 PS2のIPアドレスを入力し「Attach」のボタンを押す。 正常に接続できれば「Disk Space 」にディスク容量が表示される。 ISO形式でインストールする場合は「ISO file」にチェックを入れゲームを選択。 ディスクからインストールする場合は「Optical drive」にチェックを入れ、ゲームディスクを入れたドライブを選択する。 「Name」にゲームタイトルを入力して「Install」のボタンを押せば、インストールが始まる。 ※PCにPS2HDDを接続している場合「Locally connected Playstation 2 HDD」を選べば、 「hdl_dumb」でも「WinHIIP」と同じようにインストールできる。 PS3で「Open PS2 Loader」を使用する為の手順 ※「Open PS2 Loader」をPS3で使用する場合は「SwapMagic 3.6+」または「SwapMagic 3.8」が必要。 ※PS2互換機能のあるPS3でなければ使用することは出来ないので注意する。 「Open PS2 Loader」のELFを「SMBOOT0.ELF」に名前を変更する。 USBデバイスのルートに「SWAPMAGIC」という名前のフォルダを作り、「SMBOOT0.ELF」をコピーする。 PS3でSwapMagicを起動し、上キーとL1を押し続けると「Open PS2 Loader」が起動する。 他キーに割り当てる場合は以下の通りに名前を変更する。SMBOOT0.ELF = 上キー+L1 SMBOOT1.ELF = 上キー+L2 SMBOOT2.ELF = 上キー+R1 SMBOOT3.ELF = 上キー+R2
https://w.atwiki.jp/varmilion/
こちらはオンラインゲーム ルニア戦記で活動中のギルドVARMILIONのギルドHPです ただいま編集中につき内容はないよ! Copyright © 2009 NEXON Corporation and NEXON Co., Ltd. All Rights Reserved. Copyright (c) allm Co.,Ltd. All rights reserved.
https://w.atwiki.jp/duexotto/pages/12.html
人気商品一覧 @wikiのwikiモードでは #price_list(カテゴリ名) と入力することで、あるカテゴリの売れ筋商品のリストを表示することができます。 カテゴリには以下のキーワードがご利用できます。 キーワード 表示される内容 ps3 PlayStation3 ps2 PlayStation3 psp PSP wii Wii xbox XBOX nds Nintendo DS desctop-pc デスクトップパソコン note-pc ノートパソコン mp3player デジタルオーディオプレイヤー kaden 家電 aircon エアコン camera カメラ game-toy ゲーム・おもちゃ全般 all 指定無し 空白の場合はランダムな商品が表示されます。 ※このプラグインは価格比較サイト@PRICEのデータを利用しています。 たとえば、 #price_list(game-toy) と入力すると以下のように表示されます。 ゲーム・おもちゃ全般の売れ筋商品 #price_list ノートパソコンの売れ筋商品 #price_list 人気商品リスト #price_list