オブジェクト指向とは何でしょうか?
どうして、オブジェクト指向にしないといけないのでしょうか?
C++でできることは、C言語でほとんどできるのでは?
オブジェクト指向の利点と欠点とは?
オブジェクトとは何でしょうか?
C言語の int 変数はオブジェクトでしょうか?
デザインパターンは、オブジェクト指向によってプログラミングするときの定石に、名前をつけて分類したものです。
デザインパターンには多くの種類がありますが、GoFと呼ばれるデザインパターンが有名です。
GoFデザインパターンは、以下の23種類です。
実際は、これ以外にも様々なデザインパターンが存在します。
インスタンスを一つだけしか作れないようにするデザインパターンです。
#include <string>
#include <iostream>
using namespace std;
class MyComputer
{
public:
static const string computerName;
static MyComputer* getObject(void)
{
static MyComputer myObject;
return &myObject;
}
private:
MyComputer() {} // コンストラクタを使用できなくしておきます
MyComputer(const MyComputer& rhs); // コピーもできなくしておきます
MyComputer& operator=(const MyComputer& rhs); // = によるコピーもできなくしておきます
};
const string MyComputer::computerName("Apple");
int main()
{
MyComputer* com1 = MyComputer::getObject(); // 新しい MyComputer インスタンスが作成されます
cout << com1->computerName << endl;
MyComputer* com2 = MyComputer::getObject(); // このインスタンスは com1 と同じものです
cout << com2->computerName << endl;
return 0;
}
import java.io.*;
class MyComputer
{
public String computerName;
private static MyComputer myObject;
public static MyComputer getObject()
{
if (myObject == null)
{
myObject = new MyComputer();
}
return myObject;
}
private MyComputer()
{
this.computerName = "Apple";
}
}
public class Main
{
public static void main(String args[])
{
MyComputer com1 = MyComputer.getObject(); // 新しい MyComputer インスタンスが作成されます
System.out.print(com1.computerName + "\n");
MyComputer com2 = MyComputer.getObject(); // このインスタンスは com1 と同じものです
System.out.print(com2.computerName + "\n");
}
}
class MyComputer(object):
__instance = None;
__computerName = "Apple"
def __new__(self):
if self.__instance is None:
self.__instance = object.__new__(self);
return self.__instance;
def getName(self):
return self.__computerName
com1 = MyComputer() # 新しい MyComputer インスタンスが作成されます
print com1.getName()
com2 = MyComputer() # このインスタンスは com1 と同じものです
print com2.getName()