後で書く

この講義では基本的に オブジェクト指向 で考える ULM 図に関する話をしていきます.
まずは,オブジェクト指向に基本になる オブジェクト の説明 と クラスとインスタンス の関係を概説します.


オブジェクト指向

  • オブジェクト指向:オブジェクト(Object) を基本要素として,それらの相互作用でシステムをとらえる方法.
  • オブジェクト:物

単純に言えば,実装方法に注目するのではなく,
作りたいものをその構成要素単位で考えていく方法です.

例えば,すっごく単純な図形エディタをつくれ,という問題があったとします.
この時に,いきなりコードを書き始めると訳がわからなくなります.
そのため,ある状態での登場物をまずは考えていきます.

よくある図形エディタでは まず マウスを使いますよね.
で,このマウスでなんかの操作をすると 図形 が作成されます.
ここで図形とはどういうものかを考えると,例えば 線 とか 三角形, 四角形, 円形 があります.

ここで出てきた, マウス とか, 図形 とか, 三角形とか そういうのが,オブジェクトで,
それをどういうふうに組み合わせるのかを考えるのがオブジェクト指向という考え方です.

クラスとインスタンス


次に,クラスとインスタンスという概念を導入します.

クラスとは同じ種類のオブジェクトの集合で,
インスタンスはクラスに属する個々のオブジェクトのことを指します.
  • このような関係であるため,インスタンス は オブジェクト と等価であるとする場合もあります.

あるいは クラスは抽象的なもので,これに具体的な値を与えたものがインスタンスと理解してもよいかと思います.
例えば上の図形エディタで説明すると,三角形, 四角形は,多角形というクラスのインスタンスというように理解すればよいかと思います.
多角形クラスには 辺の数 と それぞれの長さ というパラメータがあるものだと思ってください.
ここで,例えば正三角形を作成したい場合,辺の数は 3 にして,その辺に対して同じ長さを指定すれば良いはずです.
このように,クラスを初期化し,具体的なインスタンスを作成する作業のことを,実体化 (instantiation) と呼びます.

クラス図とオブジェクト図の書き方


概念的な話は一旦,このくらいにしておいて,具体的に UML における クラス図,インスタンス図の書き方を説明していきます.
基本的なルールは以下の通りです.
オブジェクト図と,クラス図は全然別の図なので注意してください.
要はクラスを中心に考えるか,オブジェクトを中心に考えるのかの差があります.
  • クラス図 (class diagram)
    • システムの静的特徴,構造的特徴をモデル化する際に使用する図.
    • クラスを基本要素として記述する.
  • オブジェクト図 (object diagram)
    • インスタンス,すなわち,オブジェクトを基本要素として記述する.
    • クラスとオブジェクトの記法.
      • クラス:クラス名を書く.
      • オブジェクト:下線をつけてクラスと区別する.

また,属性と操作を記述する場合もあります.
簡単に言えば,クラスが持つ変数とメソッドを記述する部分です.

多分具体例で見たほうが早いと思います.
上記図形エディタで説明をすると以下のような感じになると思います.
講義では特に UML 図を書くツールを指定していませんが, このページでは PlantUML を使用します $ sudo dnf install plantuml $ sudo dnf install graphviz
クラス図

@startuml images/class_sample.png class "多角形" { pointNumber : Integer nodeLengthesList : List void checkNodeNumbers() void addNode(newNodelength) void rmNode() } @enduml

クラス図の場合,対象がクラスなので各変数は具体的な値を持ちません.
属性に値が付与されている場合これは初期値になります.

また,操作を直接記述することができます.
オブジェクト図

@startuml images/object_sample.png object "<u>三角形 : 多角形</u>" as hoge hoge : locationX = "20" hoge : locationY = "60" @enduml

オブジェクト図はオブジェクトが対象です.
これはインスタンス化されているはずですので,
属性は属性値を持ちますし,操作は記述しません.

メッセージ,操作,メソッド


クラス間の関係

関連(association)
集約(aggregation)
継承(inheritance)
再帰構造
多相性
動的束縛
抽象クラス
多重継承

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

どなたでも編集できます