眼睛的谜语:OOP设计理念特点有哪些,各特点含义?谈谈你对SOA设计思想的看法和其中涉及到的几种重要的技术?

来源:百度文库 编辑:神马品牌网 时间:2024/04/30 02:05:49

数据封装, 继承, 多态
数据封装:
将需要操作的数据包装在一个只有自己能够打开的盒子里, 避免别人直接操纵数据, 这是面对对象的最基本特点, 效果是向上层的抽象, 使得数据结构的细节不再可知.
举例:
非OOP中,可以使用struct(类C)将一些相关的数据组织到一些, 然后提供一些函数来操纵这种数据, 比如
struct Person{
int Age;
int Salary;
char* Name;
};
针对这个struct可以提供一组函数来实现一些数据操纵, 比如:
int GetAgeByName(const char* name);
void SetSalaryByName(const char* name);
但是其他开发者拿到你的开发有可能不使用你写的函数SetSarlaryByName而是直接修改person.Salary,问题在于数据的结构公开, 使得对数据的访问方式变的难以统一:有些人直接修改数据, 有些人通过函数修改. 通常来说这不是一件好事.
通过OO,将数据封装在类内并向外提供一组操作函数, 就能成功的控制对数据的访问方式:统一为使用函数访问, 一个显而易见的好处是如果你改变了数据结构而操作函数接口没有改变, 将不会影响到已经存在的代码.

这一层抽象主要是抽象掉了数据的结构, 使得程序员的注意力从数据本身放在操纵函数上

继承:
继承提供了类级别代码复用, 通过继承获得基类的数据, 能力使得你有能力在已有代码基础上开发而不是从头再写一遍或者copy.
举例(Java):
class Employee{
public void DoWork(){...}
public void RaiseSalary(){...}
protected double salary;
}
Employee类使得对于员工基本信息的操纵成为可能, 这时候再开发一个表示经理的Manager类, 由于Manager的很多基本属性与其他员工是一样的, 通过继承自Employee的方法开发就能省去力气重新编写和普通员工相同的属性及相应的操作.

多态:
该特性提供了在运行期间动态改变对象行为的能力,如果用C++的语法来讲述的话:
对于类中没有使用多态的函数, 调用哪个版本将由指针的类型决定, 编译期就可以决定
对于类中使用多态的函数, 调用哪个版本将由指针所指向的类型决定, 运行期决定
举例:
class Basic{
public:
virtual void VirtualHello(){
cout<<"Virtual Basic"<<endl;
}
void NotVirtualHello(){
cout<<"Basic"<<endl;
}
};

class Advance : public Basic{
public:
virtual void VirtualHello(){
cout<<"Virtual Advance"<<endl;
}
void NotVirtualHello(){
cout<<"Advance"<<endl;
}
};

int main(){
Basic* b = new Advance();
b->NotVirtualHello();
b->VirtualHello();
return 0;
}

output:
Basic
Virtual Advance

SOA的特点在于服务的概念, xml使得通过调用服务获得可理解的数据成为可能. SOA在更高的层面进行了抽象, 与使用OO一样, 关注点将得到进一步的分离

举例:
理想化的说:您是一位天使投资人, 最近打算在一个自己完全陌生的领域内投资一家企业, 由于完全没有该领域的经验, 需要决策支持. 有一家公司恰好提供一项服务, 通过提供需要的企业名称即可帮助您收集该企业信息, 所在行业信息, 并进行数据分析以帮助完成决策. 通过使用一个消费该服务的应用程序, 您可以清晰的作出判断, 而不需要自己花费巨大精力了解各方面相关信息.

一个重要的特点是:服务开放的形式对于程序来说是可理解的