数据抽象是仅向用户展示基本细节的属性。普通或非必需单位不会展示给用户。
数据抽象也可以定义为忽略无关细节而仅识别对象的所需特征的过程。对象的属性和行为将其与其他类似类型的对象区分开来, 并且还有助于对对象进行分类/分组。
例子:考虑现实生活中从ATM取款的情况。用户只知道在ATM机中先输入ATM卡, 然后输入ATM卡的个人识别码, 然后输入他/她要提取的金额, 最后, 他/她就得到了钱。用户不了解ATM的内部机制或取款等的实现。用户仅知道如何操作ATM机, 这称为抽象。
在C#中, 借助于抽象类.
抽象类
- 抽象类的声明是借助抽象关键词。
- 在C#中, 你是不允许创建抽象类的对象。换句话说, 你不能直接在new运算符中使用抽象类。
- 包含abstract关键字及其某些方法(并非所有abstract方法)的类称为抽象基类.
- 包含abstract关键字及其所有方法的类称为纯Abstract Base Class。
- 你不允许在抽象类之外声明抽象方法。
- 你不得将抽象类声明为密封类.
通过示例使用抽象类和抽象方法
在某些情况下, 我们想定义一个超类, 该超类声明给定抽象的结构, 而不提供每个方法的完整实现。也就是说, 有时我们想创建一个仅定义超类形式的超类, 该超类将由其所有子类共享, 然后将其留给每个子类来填充细节。
考虑一个经典的"形状"示例, 该示例可能用于计算机辅助设计系统或游戏模拟中。基本类型是"形状", 每个形状都有颜色, 大小等。由此, 可以导出(继承)特定类型的形状-圆形, 正方形, 三角形等-每个形状可能具有其他特征和行为。例如, 某些形状可以翻转。某些行为可能会有所不同, 例如, 当你要计算正方形的面积时。
例子:
// C# program to calculate the area
// of a square using the concept of
// data abstraction
using System;
namespace Demoabstraction {
// abstract class
abstract class Shape {
// abstract method
public abstract int area();
}
// square class inherting
// the Shape class
class Square : Shape {
// private data member
private int side;
// method of square class
public Square( int x = 0)
{
side = x;
}
// overriding of the abstract method of Shape
// class using the override keyword
public override int area()
{
Console.Write( "Area of Square: " );
return (side * side);
}
}
// Driver Class
class GFG {
// Main Method
static void Main( string [] args)
{
// creating reference of Shape class
// which refer to Square class instance
Shape sh = new Square(4);
// calling the method
double result = sh.area();
Console.Write( "{0}" , result);
}
}
}
输出如下:
Area of Square: 16
封装与数据抽象
- 封装形式是数据隐藏(信息隐藏), 而抽象是细节隐藏(实现隐藏)。
- 当封装将数据和作用于数据的方法组合在一起时, 数据抽象处理向用户公开和隐藏实现细节。
抽象的优点
- 它降低了查看事物的复杂性。
- 避免代码重复并提高可重用性。
- 仅向用户提供重要的详细信息, 有助于提高应用程序或程序的安全性。