首页/文章/ 详情

面向对象有限元编程|抽象

6月前浏览5166

抽象(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")


仅仅是抽象还不够,得以保留的特征是属性还是方法?其实这并没有明确的界限。类的属性是存储数据的,方法就是函数,是操作数据的。如果考虑到内存的占用,可以写成方法,每次需要的时候调用 ,调用完可以释放。如果不考虑内存,可以保存为属性,这样可以全局调用。

对于一个桁架单元,其特征有编号、材料类型、横截面面积、两个节点的信息、单元长度、单元局部坐标与总体坐标的夹角、单元局部坐标与总体坐标的转换矩阵、单元局部坐标系下的刚度矩阵、单元整体坐标系下的刚度矩阵、应力矩阵、应变矩阵等等。

平板电脑和手机之间有相同点,也有不同点。在对平板电脑进行抽象时,可以借鉴对手机进行抽象的思路。同样,对于梁单元以及其它单元,也可以借鉴对桁架单元进行抽象的思路,做到触类旁通。


来源:数值分析与有限元编程
ACT材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:6月前
太白金星
本科 慢慢来
获赞 5粉丝 8文章 317课程 0
点赞
收藏
作者推荐

面向对象有限元编程|节点类

封装,继承和多态是面向对象的三大特征。封装封装(Encapsulation)包括两个层次的概念。第一个层次是将对象的属性和方法集中起来--即对象本身。第二个层次是隐藏类的内部数据,以避免外部代码(客户端代码)直接访问。许多编程语言允许自定义私有变量和私有方法,对象可以访问这些变量和方法,外部代码却不行。Python中所有的变量都是可以公开访问的,若在变量名称前加下划线,可以起到私有变量的作用。class RF def __init__(self): self._r = r#r相当于私有,外部不能访问 继承子女会从父母那里继承血型,肤色等特征。类似地,在创建类时,该类也可以从另一个类那里继承属性和方法。被继承的类称为父类,继承的类则被成为子类。这个过程称为继承(Inheritance)。编写有限元程序时,先创建一个抽象的节点类:class AbstractNode: def __init__ (self, id): self.id = id 然后其他的节点类可以从它这里继承,这样提高了代码的逻辑性,简洁性。比如创建一个桁架节点类,将抽象类的id属性继承过来,在此基础上扩展。class TrussNode2D( AbstractNode ): def __init__ (self, id, coord_X, coord_Y, RX, RY, fx, fy): super().__init__(id) self.coord_X = coord_X #X坐标 self.coord_Y = coord_Y #Y坐标 self.RX = RX #X约束 self.RY = RY #Y约束 self.fx = fx #X节点力 self.fy = fy #Y节点力 还可以将约束和节点力单独定义为类:#include "AbstractNode.h"#include "TrussRestrain.h"#include "TrussNodeForce.h"class TrussNode : public AbstractNode{protected: size_t id; double coordX, coordY; TrussRestrain nodeRestrain; TrussNodeForce nodeForce;public: TrussNode() = default; TrussNode(size_t id_, double x_, double y_, int rx, int ry, double fx_, double fy_) : id{ id_ }, coordX{ x_ }, coordY{ y_ }, nodeRestrain{ rx, ry }, nodeForce{ fx_, fy_ } { } virtual ~TrussNode() = default; double getCoordX() const { return coordX; } double getCoordY() const { return coordY; } size_t getID() const { return id; } void setCoordX(int x_) { coordX = x_; } void setCoordY(int y_) { coordY = y_; } size_t getNodeRX() const { return nodeRestrain.getRX(); } size_t getNodeRY() const { return nodeRestrain.getRY(); } void setNodeRX(int x_) { nodeRestrain.setRX(x_); } void setNodeRY(int y_) { nodeRestrain.setRY(y_); } double getNodeFx() const { return nodeForce.getFx(); } double getNodeFy() const { return nodeForce.getFy(); }}; 多态多态(Polymorphism)指的是“为不同数据类型”提供相关接口,即函数或者方法。下面就是一个多态的实例:print为字符串、整数和浮点数这3种数据类型提供了相同的接口。print("hello world!")print(2)print(3.14) 如果一个有限元模型包含多种的节点和单元,则考虑多态。以后再谈。来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈