数据抽象是仅向用户展示基本细节的属性。平凡的或非必需的单位不会显示给用户。
数据抽象也可以定义为忽略无关细节而仅识别对象的所需特征的过程。对象的属性和行为将其与其他类似类型的对象区分开来,并且还有助于对对象进行分类/分组。
示例:考虑一个现实生活中从ATM取款的场景。用户只知道在ATM机中先输入ATM卡,然后输入ATM卡的个人识别码,然后输入他/她要提取的金额,最后,他/她就得到了钱。用户不了解ATM的内部机制或取款等的实现。用户仅知道如何操作ATM机,这称为抽象。
在C#中,借助于Abstract类实现抽象。
抽象类
- 借助于abstract关键字声明了一个抽象类。
- 在C#中,你不能创建抽象类的对象。换句话说,您不能直接将new抽象类与new运算符。
- 包含abstract关键字及其某些方法(并非所有abstract方法)的类称为Abstract Base Class 。
- 包含abstract关键字及其所有方法的类称为纯Abstract Base Class。
- 您不允许在抽象类之外声明抽象方法。
- 不允许将抽象类声明为Sealed 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
封装与数据抽象
- 封装是数据隐藏(信息隐藏),而抽象是细节隐藏(实现隐藏)。
- 当封装将数据和作用于数据的方法组合在一起时,数据抽象处理向用户公开和隐藏实现细节。
抽象的优点
- 它降低了查看事物的复杂性。
- 避免代码重复并提高可重用性。
- 仅向用户提供重要的详细信息,有助于提高应用程序或程序的安全性。