LibreOffice(12)オブジェクト指向プログラミング:インターフェイス

2014-01-20

旧ブログ

t f B! P L

前の関連記事:LibreOffice(11)LibreOfficeのオブジェクトとUNOのインターフェイス


オブジェクト指向プログラミングで調べてみるとJavaがオブジェクト指向プログラミングが標準のように扱った解説が多いです。Javaのインターフェイスについて学習します。

Javaのクラスベースオブジェクト指向プログラミング


まずはLibreOffice(10)オブジェクト指向プログラミングのお勉強:総論の復習です。

属性(変数)とメソッド(関数)からなるオブジェクトを抽象化したものがクラスです。

プログラムのなかでオブジェクトを抽象化したものであるクラスをオブジェクト(このオブジェクトをとくにインスタンスという)に実体化するようにプログラミングしたものをクラスベースオブジェクト指向プログラミングといいます。

このようにオブジェクトを抽象化したクラスを使うことにより、もともと各オブジェクトごとに書いていたコードをクラスに書くだけで済むようになります。

クラスの継承でクラスに書くコードも使いまわす


クラス同士のコードの使いまわしもできます。


この図でクラス3はクラス2の属性とメソッドを一部に含んでいます。

クラス2はクラス1の属性とメソッドを一部に含んでいます。

クラス1はクラス2のスーパークラス、クラス2はクラス1のサブクラスといいます。

クラス2はクラス3のスーパークラス、クラス3はクラス2のサブクラスといいます。

サブクラスはスーパークラスの属性とメソッドをそのまま含むこともできますし同じ名前のものを独自に上書きすることもできます。

このようにクラスの一部を引き継いでいくことをクラスの継承といいます。

LibreOffice(8)統一モデリング言語UML(Unified Modeling Language)の学習の初歩のUML:第3回ででてきたスーパークラスとクラスの関係のUMLのクラス図を使って上のクラスの継承の図を書き直すと以下のようになります。


矢印の向きが逆のように感じるかもしれませんがこれは間違っているわけではなくUML図ではこのように書きます。

クラス3がクラス2を継承している、ことをクラス3 → クラス2と書きます。

文章にでてくる順番と矢印の向きが一致すると解すれば納得できるかもしれません。

Javaのクラスはこの継承が分岐する多重継承はできません。

Javaのインターフェイスはクラスのメソッドをさらに抽象化したもの


このようにオブジェクトを抽象化してコードの使いまわしをしやすくする仕組みがクラスなのですが、Javaではそのクラスのメソッドをさらに抽象化できます。

それがインターフェイスです。

クラスのメソッドを抽象化するともうその名称しか残りませんのでインターフェイスにはメソッドを見てもメソッドの名前しかありません。

クラスでメソッドの中身を書くことを実装(implementation)といいます。

各クラスにメソッドのコードを書くことには変わりなく、コードの使いまわしができるわけではありません。

インターフェイスを使うことによって呼び出し側のコードを減らすことができます。

Java 入門 | インタフェース(4)の例がわかりやすいです。

クラスを変えることで一つのインターフェイスを呼び出すだけでそれぞれ違う仕事をさせることができます。

これは文字通りLibreOffice(11)LibreOfficeのオブジェクトとUNOのインターフェイスででてきたロリポップに表されたインターフェイスを作っているのと同じことなのです。

実装部分は知らなくもインターフェイスさえわかればあとは勝手にやってくれるということです。

これで実装の意味がようやくわかりました。

あとはサービスとかサービスマネジャがここにどうからんでくるかが知りたいですね。

UNOではサービスマネジャがサービスからインスタンスを作るようですがUNOのオブジェクトとかコンポーネントコンテクストとかもでてきてまだよく理解できていません。

参考にしたサイト


【改訂版】初歩のUML:第3回 モデリングにおける「汎化」と「特化」 - ITmedia エンタープライズ
UMLでのスーパークラスとサブクラスの表示の仕方

Java 入門 | インタフェース(4)
Javaでインターフェイスが必要な場面がよくわかります。

Java 入門 | インタフェース
上と同じサイトのJavaのインターフェイスの説明。

次の関連記事:LibreOffice(13)デベロッパーガイド1 ほとんどの例はJava

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ