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