面向对象有限元编程|节点类
时间:2022-07-26
本文章向大家介绍面向对象有限元编程|节点类,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
封装,继承和多态是面向对象的三大特征。
- 封装
封装(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)
如果一个有限元模型包含多种的节点和单元,则考虑多态。以后再谈。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C++核心准则T.144:不要特化函数模板
- 三千字带你搞懂XXL-JOB任务调度平台
- Python-科学计算-pandas-14-df按行按列进行转换
- Python实现扫码工具
- C++核心准则T.150:用static_assert检查类和概念的匹配性
- 初学者也能快速写Python脚本啦——通用功能代码分享
- C++核心准则CPL.1:C++比C更好
- C++核心准则CPL.2:如果你必须使用C,使用C和C++的共同子集,并且使用C++编译器编译C代码
- C++核心准则SF.1:如果你的项目没有正在遵从的其他习惯,为代码文件使用.cpp后缀,为接口文件使用.h后缀
- 群晖NAS搭建测速网站,支持万兆
- 二叉树:你真的会翻转二叉树么?
- C++核心准则SF.2:.h文件一定不能包含对象定义或者非inline函数定义
- Vue.js 源码⽬录设计
- 本周小结!(二叉树)
- extern "c"(2)