Showing posts with label method. Show all posts
Showing posts with label method. Show all posts

Wednesday, May 4, 2011

Từ khóa Static trong C++.

Từ khóa Static trong C++.
Keyword Static in C++.

Từ khóa Static là một trong những từ khóa được sử dụng phổ biến trong ngôn ngữ lập trình C++. Static được coi là một Specifier trong một biểu thức khai báo.
Xét trong một class, một static data member sẽ gắn liền với một class thay vì gắn liền với các object của class. Mỗi object của class sẽ điều khiển các thành phần non-static của riêng mình, trong khi đó tất cả sẽ cùng dùng chung static data member.
Lấy ví dụ sau:
  1. class Thing {
  2. public:
  3. Thing(int a, int b);
  4. ~Thing(); 
  5. void display() const ;
  6. static void showCount();
  7. private:
  8. int m_First, m_Second;
  9. static int sm_Count;
    };

Trong file implement của class Thing:
#include "static.h"
#include
int Thing::sm_Count = 0;

Thing::Thing(int a, int b)
: m_First(a), m_Second(b) {
++sm_Count;
}
 
Thing::~Thing() {
--sm_Count;
}
 
void Thing::display() const { 
using namespace std;
cout << m_First << "$$" << m_Second;
}

void Thing::showCount() {
using namespace std;
cout << "Count = " << sm_Count << endl;
}
Trong ví dụ trên ta thấy một số vấn đề sau:
1. Khai báo Static phải và chỉ được khai báo trong class declaration (header file)
2. Khởi tạo của Static member class phải được khởi tạo ngoài class declaration.

Tuesday, May 3, 2011

Khái niệm Interface trong lập trình hướng đối tượng

Khái niệm Interface trong lập trình hướng đối tượng
The Interface concept in OOP.



1. Ta đều đã biết, một đối tượng (Object) bao giờ cũng gồm hai loại là thuộc tính và hành động (behavior). Lấy ví dụ: đối tượng chó sẽ có các thuộc tính là {tên, tuổi, giống, ...} bên cạnh đó các behavior là {sủa, ăn, vẫy đuôi, ...}
Trong lập trình C++: Một đối tượng sẽ lưu các thuộc tính thông qua biến (variable) và sử dụng phương thức (method) để thực thi các behavior.

2. Một interface là một tập hợp các khai báo của các phương thức.
Có điểm cần lưu ý trong định nghĩa trên: đó là interface chỉ là tập hợp các khai báo. Có nghĩa là nó quan tâm đề cập tới "làm cái gì?" chứ không phải là "làm như thế nào?" Có nghĩa là thông qua các interface ta chỉ có thể biết interface đó làm cái gì chứ không thể biết nó được làm như thế nào để đạt được mục đích.
Với ví dụ sau ta có thể thấy được nhiều vấn đề về interface:

Ví dụ 1: Một đối tượng Car có giao diện IDrivable dùng để tương tác với đối tượng Driver gồm 3 method là : goforward, goback, halt. Các đối tượng khác như truck, train cũng có thể sử dụng giao diện trên để tương tác với Driver. Tất nhiên ta đều biết việc thực thi các method đối với đối tượng Car và Truck hay Train là khác nhau. Trong khi đó đối tượng Driver không cần quan tâm tới các interface của những đối tượng khác được thực thi như thế nào. Nó chỉ quan tâm tới bản thân các interface mà thôi.

Ví dụ 2: Một interface tên là IShape chỉ có một method là calarea() dùng để tính toán diện tích. Đối tượng Circle và đối tượng Rectangle đều có thể dùng được giao diện này dù cách thức thực thi là khác nhau. Tuy vậy một đối tượng cần tương tác thông qua giao diện IShape đều chỉ cần gọi method calarea() bất kể đó là Circle hay Rect.