OOP
面向对象程序设计(OOP)应该是大学老师最擅长教的一种设计模式. 谁都曾学过 // 中枪的举手!
但真实的情况是,它早已不如多年前那么大红大紫:
“OO设计理念的价值最初在图形系统、图形用户界面和某些仿真程序中被认可。使大家惊讶并逐渐失望的是,很难发现OO设计在这些领域以外还有多少显著优点。其中原因值得我们深究一番。”——摘自《Unix编程艺术》4.5小节
过度的OO会产生厚重的胶合层,复杂的文档和令人感到层层叠叠的架构,即使只是去完成一件简单明了的事情
.
在走入过度OO的死胡同前,我认为学习OO仍然是件值得的事情.因为OO是那么的流行,流行不一定代表实用,但是一定符合人心. //难道是程序员都向往着"对象"?
虽然OO不能解决一切,但是至少给了初学者解决部分问题的能力,把一个问题抽象为几个对象去完成一些事情,问题就顺利的解决了.
经常的,经过一些简单的面向对象的介绍,就开始讲"类"了,为什么对象要与类结合在一起呢?
面向 类 !
首先,类是一些具有共性的对象的聚合,提炼出他们全部的共性之后,如果仍然不够解决问题,那么就使之继承,细化他们的特性.
其次,实际上C++的面向对象其实是面向类的,同类的对象内直接可以互相访问私有变量,也就是说对象的封装性因为类的相同而被打破,//典型例子重载操作符
而对于继承关系而言,对象可以访问protected.public的基类变量,但是,仅限于自己或同类,不可以访问基类独立对象的protected变量!//我知道这挺难理解的,尝试运行以下代码吧!
#include <iostream>
using namespace std;
class A{
public:
A(){
a = 1;
}
protected:
int a;
};
class B: public A{
public:
int f(A & b){
cout << b.a <<endl;
}
};
int main(){
B a,b;A c;
a.f(c);
}
奇迹发生了! 你不能访问基类的变量了! 为什么? 因为面向"类"!.因为你可以通过继承"得到"基类的"特性",但是不能因此就妄图去访问基类对外隐私的部分,那些不属于你,你只得到了你继承后的,而不是原来那部分.很哲学,很赞.