我将尝试以一种简单的方式来演示封装和抽象。
- 将数据和功能包装到单个单元(称为类)中的过程称为封装。包含和隐藏有关对象的信息的封装,例如内部数据结构和代码。
封装是-
- 隐藏复杂性
- 将数据和功能绑定在一起,
- 将复杂方法设为私有,
- 将实例变量设为私有,
- 隐藏最终用户不必要的数据和功能。
封装实现抽象。
而且抽象是-
让我们看一个例子-
下图显示了“要添加到数据库中的客户详细信息”的GUI。
通过查看图像,我们可以说我们需要一个客户类别。
步骤-1:我的客户类别需要什么?
即
2个变量来存储客户代码和客户名称。
1将客户代码和客户名称添加到数据库的功能。
namespace CustomerContent
{
public class Customer
{
public string CustomerCode = "";
public string CustomerName = "";
public void ADD()
{
}
现在只有ADD方法无法在这里单独使用。
步骤-2:如何进行验证,ADD功能起作用?
我们将需要数据库连接代码和验证代码(其他方法)。
public bool Validate()
{
return true;
}
public bool CreateDBObject()
{
return true;
}
class Program
{
static void main(String[] args)
{
CustomerComponent.Customer obj = new CustomerComponent.Customer;
obj.CustomerCode = "s001";
obj.CustomerName = "Mac";
obj.Validate();
obj.CreateDBObject();
obj.ADD();
}
}
现在,无需向最终用户显示Extra方法(Validate()
;CreateDBObject()
[复杂方法和Extra方法])。最终用户只需要查看和了解将添加记录的客户代码,客户名称和ADD按钮。不在乎如何将数据添加到数据库?
步骤-3:私有化不涉及最终用户交互的其他复杂方法。
因此,将那些Complicated和Extra方法设为Private而不是Public(即,隐藏这些方法)并obj.Validate();
obj.CreateDBObject();
从Program类的main中删除,我们实现了封装。
换句话说,简化与最终用户的接口就是封装。
因此,现在完整的代码如下所示-
namespace CustomerContent
{
public class Customer
{
public string CustomerCode = "";
public string CustomerName = "";
public void ADD()
{
}
private bool Validate()
{
return true;
}
private bool CreateDBObject()
{
return true;
}
class Program
{
static void main(String[] args)
{
CustomerComponent.Customer obj = new CustomerComponent.Customer;
obj.CustomerCode = "s001";
obj.CustomerName = "Mac";
obj.ADD();
}
}
总结:
步骤-1:我的客户类别需要什么?是抽象。
步骤-3:步骤-3:将不涉及最终用户交互的额外复杂方法私有化。
PS-上面的代码很难实现。
更新:该链接上有一个视频来解释该示例:
抽象与封装之间有什么区别