抽象(Abstraction)指的是“在事物的诸多特征中,保留解决问题所需的部分特征”这一过程。在面向对象编程中,创建类时就要对客观事物进行合理的抽象。假如对一台手机进行抽象,即创建一个手机类。手机的特征很复杂,如品牌、外观颜色、重量、屏幕尺寸、屏幕分辨率、电池电量、内存、SIM卡类型、网络模式、操作系统、CPU型号、上市日期等等。解决的问题不同,手机类的属性和方法也就不同。如果分析手机的耗电量,那么只需要屏幕尺寸、屏幕分辨率、电池电量以及CPU型号这些与问题相关的特征。而忽略其他特征,这就是进行抽象。
class SmartPhone:
def __init__(self, screenSize, resolution, power, CPUtype):
self.screenSize = screenSize #屏幕尺寸
self.resolution = resolution #屏幕分辨率
self.power = power #电池容量mAh
self.CPUtype = CPUtype # CPU类型
#创建jPhone12手机
jPhone12 = SmartPhone(5.45, "1080p", 2900, "Exynos 9820")
仅仅是抽象还不够,得以保留的特征是属性还是方法?其实这并没有明确的界限。类的属性是存储数据的,方法就是函数,是操作数据的。如果考虑到内存的占用,可以写成方法,每次需要的时候调用 ,调用完可以释放。如果不考虑内存,可以保存为属性,这样可以全局调用。
对于一个桁架单元,其特征有编号、材料类型、横截面面积、两个节点的信息、单元长度、单元局部坐标与总体坐标的夹角、单元局部坐标与总体坐标的转换矩阵、单元局部坐标系下的刚度矩阵、单元整体坐标系下的刚度矩阵、应力矩阵、应变矩阵等等。
平板电脑和手机之间有相同点,也有不同点。在对平板电脑进行抽象时,可以借鉴对手机进行抽象的思路。同样,对于梁单元以及其它单元,也可以借鉴对桁架单元进行抽象的思路,做到触类旁通。