Rarestyleへようこそ
C#,デザインパターン,UML,オブジェクト指向,Webサービス,iPAQ(モバイル) アクセス数: Number_0Number_0Number_5Number_4Number_1Number_4Number_2Number_4
インデント OCPとデザインパターン
インデント サンプルコードについて
インデント デザインパターン ひとくちメモ
インデント FactoryMethodパターン
インデント AbstractFactoryパターン
インデント Builderパターン
インデント Prototypeパターン
インデント Adapterパターン
インデント Bridgeパターン
インデント Compositeパターン
インデント Decoratorパターン
インデント Facadeパターン
インデント Flyweightパターン
インデント Proxyパターン
インデント TemplateMethodパターン
インデント Chain of Responsibilityパターン
インデント Commandパターン
インデント Iteratorパターン
インデント Mediatorパターン
インデント Mementoパターン
インデント Observerパターン
インデント Stateパターン
インデント Strategyパターン
インデント Visitorパターン
インデント 速習!デザインパターン第一回
インデント 速習!デザインパターン第二回
インデント 速習!デザインパターン第三回
インデント UMLとは
インデント UML入門
インデント オブジェクト指向
インデント クラス図
インデント アクティビティ図
インデント インタラクション図
インデント ユースケース図
インデント Rarestyle証明書サービス
インデント QRコード発行WSDL
インデント QRコード発行サンプル
インデント J2EE覚書
インデント FreeMind実践レポート
インデント モバイル情報
インデント Homeページ
インデント イベント&デジタルファッション
インデント ごあいさつ・免責情報
インデント お問い合わせ
オブジェクト指向用語説明

オブジェクト指向 | 基礎用語のまとめ(順次追加中)

オブジェクトという用語は時に「もの」という直訳語で認識されることが多く、 実際には、「もの」、あるいは「対象物」と表現されることもあります。 オブジェクト指向は、機能、データを一つの対象物としてとらえ、 把握する考え方を推し進めたものといえると思います。 UMLは、このオブジェクト指向を表記するためのものです。

オブジェクトとは

オブジェクトは、それ自身の属性(プロパティ)と操作(メソッド、オペレーション・能力)を持っています。

オブジェクト間のメッセージ

オブジェクトは1つ1つは独立してしています。このようなオブジェクトは、 メッセージを通して、それぞれの役割を果たし、その結果、全体として仕事が成立していくことになります。

メッセージパッシング

あるオブジェクトから別のオブジェクトの操作(メソッド)を実行する場合、別のオブジェクト に操作を依頼していると考えます。メソッドの呼び出しは、実行するオブジェクトへのメッセージ 送信であり、オブジェクトに要求を行う唯一の手段となります。このことをメッセージパッシングと呼びます。

アクティブオブジェクト

オブジェクト内にスレッドを内蔵し、自立して能動的に動作するオブジェクトです。

パッシブオブジェクト

例外はあるかもしれませんが、一般的に、アクティブオブジェクト以外は、すべてパッシブオブジェクトとなります。

メッセージ同期

呼び出し側は、戻り値が帰ってくるまで処理を待ちます。

メッセージ非同期(シグナル)

呼び出し側が処理の完了を待たされずに、 呼び出した処理が行われるメッセージです


クラスとオブジェクトとインスタンス

クラス

オブジェクトの構造と、操作(振る舞い)を定義します。

オブジェクト

クラスはオブジェクトの設計図と表現してよいと思います。オブジェクトは、実体、具体(具象)例などと呼ばれ クラスから生成された場合、個々の実体を識別できるものになっております。

インスタンス

クラスからオブジェクトを作ることをインスタンスを生成するといいます。
一般的に、ひとつのクラスから複数のオブジェクトを生成できますが、この場合、メソッドなどコードはメモリー内で 共有されておりますが、データの部分(属性)は別領域(ヒープ)に確保されます。

抽象クラス

インスタンス化されないクラスで、観念的なクラスといえます。メソッド、プロパティなどの実装はなくメンバの宣言のみ記述します。 派生クラスのほうで、これらのメソッド、プロパティの実装することになります。

分類子 | UML

インスタンスを持つことができる要素です。クラス、インターフェースなどだけでなく、関連は関係のインスタンス であることから関連も分類子に属します。

関係、特性

特性

特性とは、分類子の性格をあらわすためのものです。

  • 特性
    • 構造特性
      • 属性(プロパティ)
      • インスタンスの構造をあらわすためのもの
    • 振る舞い特性
      • オペレーション(メソッド)
      • インスタンスの振る舞いをあらわすためのもの
クラス図 特性説明

カプセル化

オブジェクト内の仕様や構造を外部から隠蔽することで、オブジェクトの独立性を高めることです。
オブジェクトの独立性の向上は、オブジェクト内部の仕様変更が外部に影響しにくくなり、 ソフトウェアの保守性や開発効率はアップし、結果、プログラムの部分的な再利用が容易なるのです。

継承(汎化)、インターフェース

継承(汎化)

あるクラスの特性を引き継ぎ、新たなクラスを作ることです。
元になったクラスは「スーパークラス」「基本(基底)クラス」と呼ばれ、継承して作られたクラスの方は「派生クラス」といいます。
属性や操作(メソッド)などが引き継がれます。

インターフェース

広義の意味でインターフェースは、プログラム間でデータをやり取りする手順や形式を定めたものですが 、オブジェクト指向についてのインターフェースは意味的に違いが出てきます。
Java,C#などの言語レベルのインターフェースとは、メソッドあるいは属性(プロパティ)などのシグネチャ(メソッドの型)の集合です。
インターフェースは型の定義の集合であり、クラスの設計の契約となりうるものです。しかし、実装については、 記述するすることないため、インターフェースを直接インスタンス化してオブジェクトを作ることはできません。 実装を求めるには、これらインターフェースを継承した派生クラスで再定義する必要があります。

シグネチャ

メソッド名、引数の型や引数の数を表現する型です。(ちなみに、戻り値はシグネチャに含まれません。)

多様性(ポリモーフィズム)

同一のインタフェースに対して 異なる実装を持つ複数のオブジェクトがオブジェクトごとに異なる振る舞いをすることです。

多様性 C#サンプルソースコード

Polymorphism サンプルコード

using System;

namespace polymorphism
{
   /// <summary>
   /// インターフェースを定義
   /// </summary>
   /// <remarks>
   /// *愛の告白(笑)
   /// </remarks>
   interface IloveMessage
   {
       string getMessage();
   }

   /// <summary>
   /// Personクラスを定義(抽象クラス)
   /// </summary>
   ///<remarks>
   ///愛の告白インターフェースを継承
   ///</remarks>
   abstract class Person : IloveMessage
   {
       abstract public string getMessage();
   }

   /// <summary>
   /// Hanakoクラス
   /// </summary>
   /// <remarks>
   /// 日本男性で定義
   ///</remarks>
   class Taro : Person
   {
       public override string getMessage()
       {
           return "大好きです。";
       }
   }

   /// <summary>
   /// Hanakoクラス
   /// </summary>
   /// <remarks>
   /// 米国男性で定義
   ///</remarks>
   class Bob  : Person
   {
       public override string getMessage()
       {
           return "I Love You.";
       }
   }

   /// <summary>
   /// Hanakoクラス
   /// </summary>
   /// <remarks>
   /// 女性で定義
   ///</remarks>
   class Hanako  : Person
   {
       public override string getMessage()
       {
           return "おらと結婚してくだせえ。";
       }
   }

   /// <summary>
   /// Polymorphism_Sample の概要の説明です。
   /// </summary>
   class Polymorphism_Sample
   {
       /// <summary>
       /// アプリケーションのメイン エントリ ポイントです。
       /// </summary>
       [STAThread]
       static void Main(string[] args)
       {
           Person A =new Taro();
           Person B =new Bob();
           Person C =new Hanako();

           //同じクラス(Person)ですが振る舞いが異なります。
           Console.WriteLine(A.getMessage());
           Console.WriteLine(B.getMessage());
           Console.WriteLine(C.getMessage());
       }
   }
}

実行結果

多様性 Javaサンプルソースコード

IloveMessage.java
/* * インターフェースを定義 * 愛の告白(笑) * */
public interface IloveMessage {
    String getMessage();
}
Person.java
/* * Personクラスを定義(抽象クラス) * 愛の告白インターフェースを継承 * */
public abstract class Person implements IloveMessage{
    
}
Taro.java
/* * 太郎(日本男性で定義) */
public class Taro extends Person{
    public String getMessage(){
        return "大好きです。";
    }
}
Bob.java
/* * Bob(米国男性)で定義 * */
public class Bob extends Person{
    public String getMessage(){
            return "I Love You.";
    }
}
Hanako.java
/* * 花子(女性)で定義 * */
public class Hanako extends Person {
    public String getMessage(){
        return "おらと結婚してくだせえ。";
    }
}
StartClass.java
public class StartClass {

    /** * @param args */
    public static void main(String[] args) {
        // TODO 自動生成されたメソッド・スタブ

        Person A =    new Taro();
        Person B =    new Bob();
        Person C =    new Hanako();
        
        //同じクラス(Person)ですが振る舞いが異なります。
        System.out.println(A.getMessage());
        System.out.println(B.getMessage());
        System.out.println(C.getMessage());
        
    }

}
実行結果

オーバーライド

上記の多様性のサンプル例もそうですが、継承を使用する場合に、基本クラスのメソッドを 派生クラス側で書き直す(書き足す)こと。メソッドを『再定義』することをオーバーライドと呼びます。 オーバーライドを前提としている場合、基本クラスのメソッドを抽象化しておく(実装を記述しない)ことで、 基本クラスからのメソッドの実行をさせないようにすることが考えられます。C#,Javaなどの言語は、 抽象メソッドを使用するクラスは、抽象クラスで記述することになっており、抽象メソッド を持った不完全なクラスがインスタンス化されない仕組みになっています。

アーリーバインディングとレイトバインディング

基本クラスと派生クラスに同じメソッドがある場合、実行時に動的に呼び出されたメソッドを実行するのが 望ましいとされております。Javaでは実行時のインスタンスにあわせたメソッドが自動的に呼び出されるように なっています(レイトバインディング)が、C#では、コンパイル実行前の静的な呼び出しが呼び出される仕様 となっています(アーリーバインディング)。
C#でオーバーライドを行う場合、メソッドへvirtual,overrideという修飾子を基本クラスと 派生クラスのメソッドに明記します。


コミュニティマーカーUMLインデックスへ

コミュニティマーカーHomeへもどる

お天気情報
東京都 東京 - 今日の天気
晴れ - リンク先
最高 最低
気温 14 -
湿度 57.2 -
取得日:2010/03/12 11:00:00  ST: True
東京都 東京 - 明日の天気
曇時々晴 - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2010/03/12 5:00:00  ST: True
東京都 東京 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 12 6
湿度 53.6 42.8
取得日:2010/03/11 17:00:00  ST: True
大阪府 大阪 - 今日の天気
晴れ - リンク先
最高 最低
気温 16 -
湿度 60.8 -
取得日:2010/03/12 5:00:00  ST: True
大阪府 大阪 - 明日の天気
曇時々晴 - リンク先
最高 最低
気温 16 10
湿度 60.8 50
取得日:2010/03/12 11:00:00  ST: True
大阪府 大阪 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 17 6
湿度 62.6 42.8
取得日:2010/03/11 17:00:00  ST: True
livedoorのWebサービスより提供
【工事中】お天気配信 ユーザー登録
Copyright 2006 Rarestyle このページへのリンクは確認不要です。
Programming by Xenon Project Team     postmaster@rarestyle.net
免責事項について
レアスタイルサイト内検索