大学で演算工学を学んで以来コンピューターのソフトウェア畑でずっと過ごしてきた。大学ではFortran言語を学びコンピューター会社に入社以来、SE/SAとして働き、主に社会公共・流通システム・製造システム分野のシステム開発に従事した。在庫管理・受発注システム」「空調機器メーカーの工程管理システム」などなど、その要求仕様から詳細設計策定まで従事した。SEとしてだけでなく一部プログラミングもまた手掛けたこともある。対象となるコンピューターは小・中型汎用コンピューターであった。教育システム事業部に在籍し専門学校の講師として働いたこともある。次にソフトウェアの部署に移ってミニコンピューターのOSのメンテナンスに従事した。Basic」「Pascal」でシステム開発も行った。現在は余技で「Java」「JavaScript」「HTML」「PHP」「Python」「WordPress」でWeb開発を行っている。使用OSは「OS/3(OS/360-compatible)」「VortexII」「Unix」「Linux」「MS-DOS」「CP/M」「MacOS」「Windows」である。この間、米国に13ヶ月滞在し米国流のSEとしても働いた。このとき訪れた米国の都市についてメニューの「アメリカ」に載せているので参照願いたい。PCでこのWebsiteのプルダウン・メニューを快適に操作するためにはカーソルの「下向き矢印」キーを3回押しメニューの行を画面の最上部に移動させてから行ってください。↑人気ブログランキングに参加しています。よろしければ1票を!(私の)PC遍歴については「コンピューター」>「一般」をクリックオブジェクト指向とはJavaとはオブジェクト指向の言語です。OOPについては下記の項目を参照してください。サン・マイクロシステムズが開発したプログラミング言語です。C++の仕様とよく似ていて、この言語の無駄と分かりにくさを改良したものといえます。OS上では動きませんが、Javaで作成したものはどのOS*1上でも動くのが最大の特徴です。作成されたプログラムはコンパイルしてJavaバイトコードという中間コードに変換します。実行時にはパソコンにインストールされたJavaVM*2という変換ソフトが直接読み込んで処理するインタープリタの言語です。Javaを使って作成するプログラムにJavaアプレットがあります。これはHTML文書に組み込んで利用するプログラムで、ブラウザ上で動作するのが特徴です。Webページのアニメーションなどを表現できます。同様にJavaで作成されたアプリケーションをJavaアプリケーションといい、JavaVM上で動作しブラウザとは別に動作するソフトウェアとなります。Javaアプレットがブラウザで実行されるのに対して、JavaサーブレットといってWebサーバで必要に応じて実行されるプログラムもあります。MachineObject指向とはオブジェクト指向はソフトウェア開発の総合技術。オブジェクト指向でなぜソフトウェアを作るのか。その理由はソフトウェアを楽に作りたいからである。オブジェクト指向を一言でいえば難しいソフトウェア開発を楽に行うための総合的な技術。オブジェクト指向技術が難しいと思われるのは、技術そのものの複雑さに起因するものではなく、状況が混乱しているからと言った方が適切。不適切な比喩や比喩の使いすぎは混乱を与えてしまう危険。Oriented)は「もの中心」あるいは「もの指向」という意味。オブジェクト指向の場合は、プログラム言語やUML、大規模な再利用部品など、すぐに使える技術がベースにある。OOPの仕組みとして特徴的なメモリの使われ方を説明。OOPがもたらした、再利用部品群とデザインパターン。UML,モデリング技術。プログラミングを正しく理解する、オブジェクト指向の仕組みと現実世界を混同しないことがコツである。オブジェクト指向プログラミングの三大要素―クラス、ポリモーフィズム、継承。クラス―「分類」インスタンス―「具体的なもの」、「実例」クラス―インスタンス、集合と要素の関係。したクラスに対するメッセージの送り方を共通にする仕組み」、「相手が具体的にどのクラスのインスタンスであるかを意識せずにメッセージを送れる仕組み」、「メッセージを送る側が楽をするための仕組み」。継承―「ものの種類の共通点と相違点を体系的に整理する仕組み」、全体集合と部分集合スーパークラスに共通の性質をきちんと定義しておくと、サブクラスを楽に作成できる。<オブジェクト指向と現実の違い(その1)>現実世界では先に具体的なものがあり、それを様々な基準で分類する。オブジェクト指向の世界では1種類のクラスからインスタンスが作られる。作られたインスタンスは複数のクラスに帰属することができず、時間がたっても別のクラスに所属替えすることができない。<オブジェクト指向と現実の違い(その2)>現実世界で動く人間は、個人個人が意志を持って自由に動く。オブジェクト指向の世界のインスタンスは、外部から指示がない限り自分から動くことはなく、あらかじめ決められたことをその通りにしか実行できない。オブジェクト指向技術の中心はプログラム技術であり、クラス、ポリモーフィズム、継承も、純粋にプログラミング言語の仕組みとして理解が必要。OOPはそれ以前のプログラミング技術を基礎として、その欠点を補うために考えられたものである。オブジェクト指向は品質のよいプログラムを高い生産性で作るための実践的な技術である。C言語は構造化プログラミングの機能を完全にサポートしている。メモリ領域を効率的に使用するためのポインタなどのきめ細かな機能を備えていた。書式付で文字列を出力する処理はprintf関数で実現している。COBOLやFORTRANでは言語仕様として対応している。この仕組みにより、言語コンパイラを改良しなくても、言語使用レベルの機能追加ができるようになった。これは、現在のJavaなどのオブジェクト指向環境でも引き継がれている重要な考え方である。構造化プログラミングでは解決できなかった2つの問題、グローバル変数問題と貧弱な再利用。OOPにはグローバル変数を使わずに済ませる仕組みが備わっているOOPには共通サブルーチン以外の再利用を可能にする仕組みが備わっているクラスは、関連性の強いサブルーチン(関数)とグローバル変数を1つにまとめて粒度の大きいソフトウェア部品を作る仕組みである。ポリモーフィズムと継承は、共通サブルーチンではうまく対処できない重複したコードを一本化する仕組みである。クラスは「まとめて、隠して、たくさん作る」仕組み、サブルーチンと変数を「まとめる」クラスの内部だけを使う変数やサブルーチンを「隠す」1つのクラスからインスタンスを「たくさん作る」OOPではクラスにまとめられたサブルーチンを「メソッド」、グローバル変数を「インスタンス変数」(別名は属性、フィールド)と呼ぶ。大規模なソフトウェアをさらに整理整頓するために複数のクラスをグループ化する「パッケージ」という。<クラスの効能1:まとめる>結びつきの強い(複数の)サブルーチンと(複数の)グローバル変数を1つのクラスに「まとめる」ことができる。部品の数が減るメソッド(サブルーチン)の名前付けが楽になるメソッド(サブルーチン)が探しやすくなる<クラスの効能2:隠す>クラスに定義した変数とメソッド(サブルーチン)を、他のクラスから「隠す」ことができる。これにより、プログラムの保守性悪化の元凶となるグローバル変数を使わずにプログラムを書くことが可能になる。インスタンスはクラスで定義したインスタンス変数が確保されるメモリ領域である。インスタンスを格納する変数名.メソッド名(引数)定義したクラスの側では、そのインスタンスが複数同時に動くことを全く意識する必要がない。アプリケーションでは同種の情報を複数同時に扱うケースがある。ファイル、文字列、GUIのボタンやテキストボックス、ビジネスアプリケーションの顧客や注文や社員、通信制御プログラムの電文やセッションなど<クラスの効能3:たくさん作る>いったんクラスとして定義すると、実行時にそこからいくつでもインスタンスを作ることができる。同種の情報を複数同時に扱う処理であっても、そのクラス内部のロジックをシンプルにできる。<OOPの三大要素1-クラス>クラスは「まとめて、隠して、たくさん作る」仕組みサブルーチンと変数を「まとめる」クラスの内部だけで使う変数やサブルーチンを「隠す」1つのクラスからインスタンスを「たくさん作る」<インスタンス変数の性質>別のクラスのメソッドからアクセスできないように隠すことができる。インスタンスが作られた後は、必要なくなるまでメモリ上に残される。インスタンス変数は「長持ちするローカル変数」または「仲間内だけのグローバル変数」である。<OOPの三大要素2-ポリモーフィズム>ポリモーフィズムはサブルーチンを呼び出す側のロジックを一本化する仕組み、すなわち「共通メインルーチン」を作る仕組みである。<OOPの三大要素3-継承>変数とメソッドをまとめた共通クラスを作って、その定義を丸ごと拝借できる仕組み。継承は、クラス定義の共通部分を別クラスにまとめることで、コードの重複を排除する仕組みである。OOPの継承ではスーパークラスの性質はサブクラスに引き継がれた後もスーパークラスに残る。変数に対して型を指定するのか1つ目の理由はメモリ領域を有効に使うためである。2つ目の理由はプログラムのエラーを未然に防止するためである。クラスを型として宣言した変数には、そのクラスで定義されているメソッドを正しく呼び出しているかどうかも、コンパイラによってチェックされる。戻り値とは違う形式で、メソッドから特別なエラーを返す仕組み従来の方法の欠点エラーコードの判定処理を書き忘れたり値を間違えた場合でも、コンパイラで見つけられない。エラーコードを判定する同じようなロジックがサブルーチンで連鎖してしまうこと。JAVAでのこの仕組みは、無駄を省くことと、間違いを防止する2つの効果がある。進化したOOPの仕組み3-ガベージコレクションOOPでは「たくさん作る」仕組みを利用することで、インスタンスを自由に作成することができますが、削除は慎重に行う必要がある。インスタンスを削除する処理をシステムが自動的に実行する仕組みを採用している。間違いやすいメモリの解放処理を、言語の文法として提供せずにシステムが自動的に実行する。OOPを生かすも殺すもプログラマの心掛け次第。OOPの機能を生かせるかどうか、どうやったら保守がしやすく、再利用しやすくなるかを考える。プログラムのメモリ領域は、静的領域、ヒープ領域、スタック領域の3つに分けて管理される。静的領域は、プログラムの開始時に確保され、以降プログラムが終了するまでは位置が固定される領域である。ヒープ領域はプログラムの実行時に動的に確保するためのメモリ領域です。英語のheapは「たくさん」「山ほど」といった意味。プログラムの開始時にたくさんのメモリ領域をあらかじめ確保しておく。スタック領域はスレッドの制御のために使われるメモリ領域です。ヒープ領域は複数のスレッドから供用されますが、スタック領域はスレッドに1つずつ用意されている。OOPで書かれたプログラムは、有限のメモリ領域であるヒープ領域をじゃぶじゃぶ使って動く。インスタンスを作る命令(Javaではnew命令)が実行されると、そのクラスのインスタンス変数を格納するのに必要な大きさのメモリがヒープ領域に割り当てされます。この時インスタンスを指定して起動されるOOPのメソッド呼び出しを実現するため、インスタンスからメソッドエリアにあるクラス情報への対応付けも行われる。インスタンスを格納する変数にはインスタンスそのものではなく、インスタンスの「ポインタ」が格納される。