首页/文章/ 详情

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

1月前浏览991

封装,继承和多态是面向对象的三大特征。

  • 封装

封装(Encapsulation)包括两个层次的概念。第一个层次是将对象的属性和方法集中起来--即对象本身。第二个层次是隐藏类的内部数据,以避免外部代码(客户端代码)直接访问。许多编程语言允许自定义私有变量和私有方法,对象可以访问这些变量和方法,外部代码却不行。Python中所有的变量都是可以公开访问的,若在变量名称前加下划线,可以起到私有变量的作用。

classRF
def__init__(self):

        self._r = r
#r相当于私有,外部不能访问
  • 继承

子女会从父母那里继承血型,肤色等特征。类似地,在创建类时,该类也可以从另一个类那里继承属性和方法。被继承的类称为父类,继承的类则被成为子类。这个过程称为继承(Inheritance)。编写有限元程序时,先创建一个抽象的节点类:

classAbstractNode:
def__init__(self, id):
        self.id = id

然后其他的节点类可以从它这里继承,这样提高了代码的逻辑性,简洁性。比如创建一个桁架节点类,将抽象类的id属性继承过来,在此基础上扩展。

classTrussNode2D( 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"
classTrussNode :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;
doublegetCoordX()constreturn coordX; }
doublegetCoordY()constreturn coordY; }
size_t getID() const { return id; }
voidsetCoordX(int x_){ coordX = x_; }
voidsetCoordY(int y_){ coordY = y_; }
size_t getNodeRX() const { return nodeRestrain.getRX(); }
size_t getNodeRY() const { return nodeRestrain.getRY(); }
voidsetNodeRX(int x_){ nodeRestrain.setRX(x_); }
voidsetNodeRY(int y_){ nodeRestrain.setRY(y_); }
doublegetNodeFx()constreturn nodeForce.getFx(); }
doublegetNodeFy()constreturn nodeForce.getFy(); }
};
  • 多态

多态(Polymorphism)指的是“为不同数据类型”提供相关接口,即函数或者方法。下面就是一个多态的实例:print为字符串、整数和浮点数这3种数据类型提供了相同的接口。

print("hello world!")
print(2)
print(3.14)

如果一个有限元模型包含多种的节点和单元,则考虑多态。以后再谈。

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

作者推荐

未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈