【事件の表示】
　平成１１年特許願第３５７３７９号「情報処理装置、情報処理方法および情報処理プログラムを格納したコンピュータ読取り可能な記録媒体」拒絶査定不服審判事件〔平成１３年　６月２９日出願公開、特開２００１−１７５４６４〕について、次のとおり審決する。
【結　論】
　本件審判の請求は、成り立たない。
【理　由】
１．手続の経緯・本願発明
　本願は、平成１１年１２月１６日の出願であって、その請求項３に係る発明（以下、「本願発明」という）は、平成１５年８月２２日付けの手続補正書によって補正された明細書及び図面の記載からみて、次のものと認める。
　
「オブジェクト指向技術を応用したクラスを新規に作成し、当該クラスを利用して情報処理を行う情報処理方法において、
　既存のクラス内のメソッドを表示するステップと、
　表示されたメソッドの中から所望の情報処理内容を定義するためのメソッドを選択するステップと、
　選択されたメソッドを表示するステップと、
　ユーザからの指示に応じて、上記クラスの構成を変更することなく、選択されたメソッドを用いて新規クラスを示すプログラムソースコードを作成するステップと、
　上記プログラムソースコードをコンパイルし、実行ファイルを作成するステップと、
　上記実行ファイルを実行し、上記所望の情報処理内容を実現するステップと
　を有することを特徴とする情報処理方法。」
　
２．引用例
　これに対し、原査定の拒絶の理由で引用された特開平６−３２４８５３号公報(以下、「引用例」という。)には、図面とともに次の事項が記載されている。
　
（１）「【００２５】
【作用】本発明によるオブジェクト指向プログラミンク言語を対象とした原始コード編集装置においては、継承関係、あるいは部品−全体の関係にあるクラスに定義されたメンバ関数の定義情報、すなわち個々のメンバ関数の名称、引数の数や型、返り値の型等を、本編集装置の表示装置の表示画面上で既存のクラスのメンバ関数の定義情報から複写して定義することによって、新たに定義するクラスのメンバ関数の名称を一連のクラス群の間で容易に統一を図れるようにし、再利用しやすいソフトウェア部品の開発を促進する。
【００２６】
【実施例】
実施例１．以下、請求項第１項の一実施例を図を用いて説明する。図１は本発明によるオブジェクト指向プログラミング言語を対象とする原始コード（プログラム）編集装置の一実施例の実行画面を表す図である。
【００２７】図１に示されているように、この実行画面は、４つの部分に分かれている。図１中、１０１はクラス定義情報表示部であり、１０２はクラスに定義されたメンバ関数のカテゴリを一覧表示するメンバ関数カテゴリ表示部である。また、１０３は継承基クラスまでの全ての先祖クラスで定義されているメンバ関数の表示・選択を行う継承基メンバ関数表示部であり、１０４は現在編集対象としているクラスのメンバ関数定義編集部である。」
　
（２）「【００３２】次に、本実施例における動作について図３〜図５に示されているフローチャートを用いて説明する。本装置を起動すると、処理はステップ１０１へ進み、原始コード読み込み部１１によって原始コード７が読み込まれる。読み込まれた原始コード７は、原始コード解析部１２に供給され、コードからクラス定義情報を抽出する（ステップ１００２）。抽出されたクラス定義情報から、さらにクラス間の継承関係が抽出され、これはクラス間継承関係記憶部２１に登録される。登録された情報は全てクラス間継承関係データ２２に反映される。
【００３３】また、読み込まれたクラスがクラス毎定義情報データ（群）２５に記録されていない場合（ステップ１００４でＮｏの場合）には、読み込まれたクラス定義情報を基にクラス毎定義情報データが作成される（ステップ１００５）。さらにステップ１００６で原始コード７からメンバ関数定義情報が抽出され、これをステップ１００５で作成したクラス毎定義情報データと合わせて格納する。以上の動作が、各クラスの全メンバ関数について行われる。
【００３４】ステップ１００９において、全てのクラスの定義とクラスのメンバ関数定義が読み込まれたか否かが判断され、全て読み込まれたと判断された場合には、ステップ１０１０においてメソッド情報編集部が起動され、ユーザが入力する編集コマンドを待つ状態となる。
【００３５】ステップ１０１１においては、読み込んだ編集コマンドが「編集終了」の場合には（ステップ１０１２でＹｅｓの場合）、メソッド定義編集操作部３４から原始コード生成部１３が起動される。原始コード生成部１３は、クラス間継承関係記憶部２１に記録された全てのクラスについてクラス毎定義情報データ２５を読み出し、新規原始コード８を生成し（ステップ１０１４）、終了する。
【００３６】ステップ１０１２でＮｏの場合には、ステップ１０１６へ進み、ステップ１０１１で入力されたコマンドが新規クラスの追加定義を指定するものであるか否かが判定される。もしＹｅｓの場合、ステップ１０１７へ進み、ユーザが入力するクラス定義情報を読み込む。このクラス定義情報が既存のクラス定義情報と重複しない場合（ステップ１０１８でＮｏの場合）には、ステップ１０１９で、新たに入力されたクラス定義情報を解析し、クラス間継承関係データ２２にこのクラスの情報を追加する。さらに、このクラスのクラス定義情報をクラス毎定義情報データ２５に追加登録する（ステップ１０２０）。
【００３７】次に、ステップ１０２１で、新たに定義されたクラスの継承基となる全てのクラスについて、クラス毎定義情報を検索において定義されるメンバ関数を、クラス・メソッド定義情報表示部３１によって一覧表示する。この表示は、例えば図１に示されているメンバ関数カテゴリ一覧表示部１０２、及びメンバ関数表示部１０３のように表示される。
【００３８】次に、本装置の制御はステップ１０２９へ進み、継承基にあたるクラスのメンバ関数の定義を参照するか否かが判定される。ここでＹｅｓの場合、すなわち参照する場合には、ステップ１０３０へ進み、参照対象となるメンバ関数の指定が読み込まれる。この操作は、ユーザが図１のメンバ関数カテゴリ表示部１０２及び継承基メンバ関数表示部１０３上でポインティングデバイス５を用いて指示するメンバ関数の名称を読み取ることで行われる。さらに、選択したメンバ関数の実現部を参照する場合（ステップ１０３１でＹｅｓが選択された場合）、原始コード編集エディタを起動し、現在選択されているメンバ関数の実現部が表示される（ステップ１０３２）。
【００３９】最後にステップ１０１１に制御が移り、ユーザが入力するコマンドを待つ状態となる。なお、ステップ１０２９及び１０３１でＮｏが入力された時もステップ１０１１に進み、次にユーザが入力するコマンドを待つ。
【００４０】ステップ１０１６でＮｏの場合はステップ１０２３へ進み、ステップ１０１１で入力されたコマンドが既定義のクラスのメンバ関数を参照するものか否かが判定される。ここでＹｅｓであった場合、すなわち既定義のクラスのメンバ関数を参照するものであった場合にはステップ１０２４へ進み、参照するメンバ関数を定義したクラス名をユーザが入力するのを読み込む。次に、ステップ１０２５で入力されたクラス名に対応するクラス毎定義情報ファイルが既にあるかどうかを判定し、もし既に定義済みの場合は、クラス間継承関係データ２２から指定されたクラスの継承基クラスを検索し（ステップ１０２６）、この結果をクラス・メンバ関数定義情報検索部２６に供給して指定したクラスの継承基にある全クラスのクラス毎定義情報データを検索する（ステップ１０２７）。ステップ１０２８では、この検索結果を基に、指定したクラスの継承基クラスで定義されているメンバ関数の定義情報が、図１の継承基メンバ関数表示部１０３に表示される。以下、ステップ１０２９〜ステップ１０３２の処理が同様に行われる。
【００４１】ステップ１０２３でＮｏが選択された場合はステップ１０３３へ進み、１０１１で入力されたコマンドが、現在選択しているメンバ関数定義情報を複写するものか否かが判定される。ここでＹｅｓが選択された場合、すなわちメンバ関数定義情報を複写するものであるばあいにはステップ１０３４へ進み、現在画面１０３で選択されているメンバ関数の定義情報を３４．メソッド定義編集操作部中の一時記憶バッファに複写する。最後にステップ１０１１に進み、次にユーザが入力するコマンドを待つ。
【００４２】ステップ１０３３でＮｏが選択された場合はステップ１０３５へ進み、１０１１で入力されたコマンドが、現在参照中のクラス（図１中クラス定義情報表示部１０１に表示されているクラス）に対して新たなメンバ関数の追加定義を指示するものか否かを判定する。ここでＹｅｓが選択された場合、ステップ１０１６へ進み、メソッド定義情報編集部３４中の一時記憶バッファに、既にいずれかのメンバ関数定義情報が保存されているか否かが判定される。ここでＹｅｓの場合は、一時記憶バッファに保存されたメンバ関数の定義情報を、図１中のメンバ関数定義編集部１０４に複写する（ステップ１０１７）。
【００４３】一方、ステップ１０１６でＮｏとなった場合、すなわち既定義のクラスのメンバ関数を参照するものではない場合にはステップ１０１８へ進み、ユーザが入力する新規メンバ関数の定義情報を読み込む。いずれの場合も、その次にステップ１０１９へ進み、追加されたメンバ関数定義情報に対応したメンバ関数実現部のテンプレートを作成する。このテンプレートは、例えば継承基のクラスの同名のメンバ関数を呼び出す、あるいは何も操作を行わないメンバ関数を実現するものである。ユーザは、後にこのテンプレートを編集し、適切なメンバ関数の実現部を記述する。次に、ステップ１０４１へ進み、追加されたメンバ関数定義情報を、２５．クラス毎定義情報データ（群）中の対応するクラス毎定義情報データに追加する。最後に、ステップ１０１１へ戻り、ユーザが次に入力するコマンドの読み込みを行う。
【００４４】なお、ステップ１０３５でもＮｏが選択された場合は、本実現例ではステップ１０１１へそのまま戻り、次のユーザが入力するコマンドの読み込みを行う。」
　
　上記記載では、ユーザーが入力する編集コマンドとして、
・「編集終了」（【００３５】段落）
・新規クラスの追加定義を指定するもの（【００３６】〜【００３９】段落）
・既定義クラスのメンバ関数を参照するもの（【００４０】段落）
・現在選択しているメンバ関数定義情報を複写するもの（【００４１】段落）
・現在参照中のクラスに対して新たなメンバ関数の追加定義を指示するもの（【００４２】〜【００４３】段落）
が示されている。
　なお、この中で、既定義クラスのメンバ関数を参照するものでは、ステップ１０２８において、指定されたクラスの継承基クラスで定義されているメンバ関数の定義情報を表示すること、また、ステップ１０３０において、継承基にあたるクラスのメンバ関数を選択することが【００４０】段落、及び、【００３８】段落の記載から理解される。
　また、現在選択しているメンバ関数定義情報を複写するものについては、【００４１】段落の記載にあるように、現在選択しているメンバ関数の定義情報を一時記憶バッファに複写するものである。
　また、現在参照中のクラスに対して新たなメンバ関数の追加定義を指示するものでは、【００４２】段落の記載にあるように、前記一時記憶バッファに記憶されたメンバ関数定義情報を複写して新たなメンバ関数の定義に用いている。
　一方、【００２５】段落の記載からは、「新たに定義するクラス」に「既存のクラスのメンバ関数の定義情報から複写して定義する」ことが読み取れる。「既存のクラス」と「既定義クラス」は実質的に同義と解されるから、このことと、上記の各編集コマンドの内容からみて、これらの編集コマンドを使用して、まず、既定義クラスのメンバ関数を参照して、メンバ関数を選択し、次に、現在選択しているメンバ関数定義情報を複写し、さらに、新規クラスの追加定義を行い、そして、現在参照中のクラスに対して新たなメンバ関数の追加定義を行い、複写したメンバ関数定義情報を用いて新たなメンバ関数を定義し、最後に「編集終了」を行う、といった順序で処理を行うことが読み取れる。
　
　してみると、引用例には、
　
　オブジェクト指向プログラミンク言語を対象とした原始コード編集装置における新たなクラスの定義方法において、
　既定義クラスのメンバ関数を参照する編集コマンドにより、指定したクラスの継承基クラスで定義されているメンバ関数の定義情報を、クラス毎定義情報データ群を検索することにより、継承基メンバ関数表示部に表示するステップと、
　継承基メンバ関数表示部上でポインティングデバイスを用いてメンバ関数を選択するステップと、
　現在選択しているメンバ関数定義情報を複写する編集コマンドにより、選択しているメンバ関数の定義情報を一時記憶バッファに複写するステップと、
　新規クラスの追加定義を指定する編集コマンドにより、クラス毎定義情報データ群に新規クラスを追加登録するステップと、
　現在参照中のクラスに対して新たなメンバ関数の追加定義を指定する編集コマンドにより、一時記憶バッファに記憶されたメンバ関数定義情報をクラス毎定義情報データ群に追加するステップと、
　編集終了の編集コマンドにより、クラス毎定義情報データ群を読み出して新規原始コードを生成するステップと、
　を有する新たなクラスの定義方法。
　
　に関する発明が開示されているものと認める。（以下、これを「引用例記載の発明」という）
　
３．対比
　本願発明と引用発明を対比する。
　まず、引用例記載の発明における、「オブジェクト指向プログラミンク言語を対象とした原始コード編集装置における」クラスは、本願発明でいうところの、「オブジェクト指向技術を応用した」ものであるといえるから、引用例記載の発明における、「オブジェクト指向プログラミンク言語を対象とした原始コード編集装置における新たなクラスの定義方法」と、本願発明の、「オブジェクト指向技術を応用したクラスを新規に作成し、当該クラスを利用して情報処理を行う情報処理方法」は、「オブジェクト指向技術を応用したクラスを新規に作成する方法」である点で共通する。
　
　次に、引用例記載の発明の「指定したクラスの継承基クラス」は、クラス毎定義情報データ群に含まれるものであり、既に定義されたクラスと解されるから、本願発明でいう「既存のクラス」であるといる。また、引用例記載の発明における、クラスで「定義されている」というのは、本願発明でいうクラス「内の」に相当する。また、引用例記載の発明の「メンバ関数」は、本願発明における「メソッド」に相当する。してみると、引用例記載の発明における「既定義クラスのメンバ関数を参照する編集コマンドにより、指定したクラスの継承基クラスで定義されているメンバ関数の定義情報を、クラス毎定義情報データ群を検索することにより、継承基メンバ関数表示部に表示するステップ」は、本願発明の「既存のクラス内のメソッドを表示するステップ」に相当する。
　
　また、引用例記載の発明において、「継承基メンバ関数表示部上でポインティングデバイスを用いてメンバ関数を選択する」ということは、メンバ関数は表示されたものであり、また、メンバ関数が、「情報処理内容を定義する」ものであることは、技術常識からして自明であるから、引用例記載の発明における「継承基メンバ関数表示部上でポインティングデバイスを用いてメンバ関数を選択するステップ」は、本願発明の「表示されたメソッドの中から所望の情報処理内容を定義するためのメソッドを選択するステップ」に相当する。
　
　次に、本願発明における「ユーザからの指示に応じて、上記クラスの構成を変更することなく、選択されたメソッドを用いて新規クラスを示すプログラムソースコードを作成するステップ」の記載において、「上記クラス」とは、直近に上記されている「既存のクラス」を指すものと解される。
　一方、引用例記載の発明における、
・「現在選択しているメンバ関数定義情報を複写する編集コマンドにより、選択しているメンバ関数の定義情報を一時記憶バッファに複写するステップ」
・「新規クラスの追加定義を指定する編集コマンドにより、クラス毎定義情報データ群に新規クラスを追加登録するステップ」
・「現在参照中のクラスに対して新たなメンバ関数の追加定義を指定する編集コマンドにより、一時記憶バッファに記憶されたメンバ関数定義情報をクラス毎定義情報データ群に追加するステップ」
・「編集終了の編集コマンドにより、クラス毎定義情報データ群を読み出して新規原始コードを生成するステップ」
の一連のステップは、コマンドを入力する「ユーザーからの指示に応じて」実行されるものである。また、これら一連のステップにおいて、「既存のクラス」は、メンバ関数の定義情報を複写されるのみであって、構成を変更されるものでないことは明らかである。また、これら一連のステップにおける「新規クラス」には、選択されたメンバ関数の定義情報が追加されているから、該「新規クラス」は「選択されたメソッドを用いて」いるといえる。さらに、引用例記載の発明における「新規原始コード」は「オブジェクト指向プログラミンク言語を対象とした原始コード編集装置」によって生成されるものである点からみて、オブジェクト指向プログラミング言語のプログラムソースコードであることは自明であり、本願発明の「プログラムソースコードに対応する。そして、これら一連のステップによって生成される「新規原始コード」には、「新規クラス」のコードも含まれるから、該「新規原始コードを生成する」ことは、本願発明における「新規クラスを示すプログラムソースコードを作成する」ことを含んでいる。
　してみると、引用例記載の発明における「現在選択しているメンバ関数定義情報を複写する編集コマンドにより、選択しているメンバ関数の定義情報を一時記憶バッファに複写するステップ」、「新規クラスの追加定義を指定する編集コマンドにより、クラス毎定義情報データ群に新規クラスを追加登録するステップ」、「現在参照中のクラスに対して新たなメンバ関数の追加定義を指定する編集コマンドにより、一時記憶バッファに記憶されたメンバ関数定義情報をクラス毎定義情報データ群に追加するステップ」は、全体として、本願発明の「ユーザからの指示に応じて、上記クラスの構成を変更することなく、選択されたメソッドを用いて新規クラスを示すプログラムソースコードを作成するステップ」に相当する。
　
　また、引用例記載の、「新たなクラスの定義方法」と、本願発明の「情報処理方法」は、「新たなクラスの定義方法」である点で共通する。
　
　してみると、本願発明と引用例記載の発明は、
　
　オブジェクト指向技術を応用したクラスを新規に作成する方法において、
　既存のクラス内のメソッドを表示するステップと、
　表示されたメソッドの中から所望の情報処理内容を定義するためのメソッドを選択するステップと、
　ユーザからの指示に応じて、上記クラスの構成を変更することなく、選択されたメソッドを用いて新規クラスを示すプログラムソースコードを作成するステップと、
　を有する新たなクラスの定義方法。
　
である点で一致し、
　
（相違点１）
　本願発明は、「選択されたメソッドを表示するステップ」を備えるのに対し、引用例記載の発明では、このステップに相当する内容が明示されていない点。
（相違点２）
　本願発明は、「上記プログラムソースコードをコンパイルし、実行ファイルを作成するステップ」と、「上記実行ファイルを実行し、上記所望の情報処理内容を実現するステップ」を備えるものであり、新規に作成した「クラスを利用して情報処理を行う情報処理方法」であるのに対し、引用例記載の発明では、これらのステップに相当する開示がなく、「新たなクラスの定義方法」にとどまっている点。
　
で相違する。
　
４．当審の判断
　上記相違点について検討する。
　
（相違点１について）
　一般にポインティングデバイスを用いた選択において、選択された対象を反転表示するなどして、操作者に選択されたことをフィードバックすることは、本願出願前周知の技術と認められる。ここでいう反転表示が表示の一種であることは明らかである。
　一方、引用例記載の発明には、「継承基メンバ関数表示部上でポインティングデバイスを用いてメンバ関数を選択するステップ」が含まれているから、ここに該周知の技術を適用して、選択されたメソッド（メンバ関数）を表示するステップを付加することに格別の困難性は認められない。
（相違点２について）
　オブジェクト指向プログラミング言語に対するコンパイラは、例示するまでもなく本願出願前周知である。そして、プログラムソースコードの実行方法として、該プログラムソースコードを、該周知のコンパイラを用いてコンパイルして実行ファイルを生成し、該実行ファイルを実行して情報処理を行うことも、本願出願前周知の技術であるから、引用例記載の発明によって生成された新規クラスのプログラムソースコード（新規原始コード）を使用するために、「上記プログラムソースコードをコンパイルし、実行ファイルを作成するステップ」と、「上記実行ファイルを実行し、上記所望の情報処理内容を実現するステップ」を付加し、新規に作成したクラスを利用して情報処理を行う「情報処理方法」を得ることに格別の困難性は認められない。
　
　上記で検討したように、相違点１，２はいずれも格別のものではなく、また、これらの相違点により格別の効果が生じるものとも認められない。
　
　なお、請求人は審判請求書の【請求の理由】において、「引用例１（【審決注】本審決における「引用例」）の発明は、原始コードのクラスの継承構造やメソッドのソースを構文解析して、メソッド情報編集部にてクラスのソースそのものを再編集して新原始コードを生成するものである。一方、本願発明は、クラスの継承構造クラスの機能等は原ソースを何ら解析分解せずにコピーして、そこに他のクラスで持っているメソッドを付加するものである。」といった主張を行っているのでこの点について検討する。
　本願発明には「原ソース」なる構成はなく、また、「原ソース」に対応すると認められる構成もない。したがって、請求人の「本願発明は、クラスの継承構造クラスの機能等は原ソースを何ら解析分解せずにコピーして、そこに他のクラスで持っているメソッドを付加するものである。」との主張は、請求項の記載に基づいたものでないから採用できない。
　
５．むすび
　したがって，本願発明は，引用例に記載された発明に基づいて当業者が容易に発明をすることができたものであるから，特許法２９条２項の規定により特許を受けることができない。
　よって，結論のとおり審決する。