Жутко огромный конструктор... как сделать лучше?
От: FDSC Россия consp11.github.io блог
Дата: 04.06.07 13:02
Оценка:
Есть класс, в нём есть куча коэффициентов для системы дифференциальных уравнений. Получается что-то невообразимое (см. ниже)

Как это нормально сделать? Массив тут не очень-то подходит, потому что всё равно тогда нужно будет сделать индексатор, который будет по именам коэффициентов работать (использование коэффициентов нужно именно по именам) — т.е. всё равно куча тупого кода получается.

Вот думаю, можно это как-то нормально сделать, что бы кода было поменьше?

public class Bar
            {
                public N1: Node;   // Начальный узел
                public N2: Node;   // Конечный узел
                public N3: Node;   // Узел, указывающий направление оси y (точнее, лежащие в плоскости, перпендикулярной оси z)
                
                public Lv : VinVector;
                public L  : double;
                
                // Параметры поперечного сечения
                public A   : XmlIOsystem.CalclulatorFunction;      // Площадь
                public Iz  : XmlIOsystem.CalclulatorFunction;      // Момент инерции относительно оси Z
                public Iy  : XmlIOsystem.CalclulatorFunction;      // Момент инерции относительно оси Y
                public Zp  : XmlIOsystem.CalclulatorFunction;      // Максимальное расстояние по оси z до материала сечения от центра масс по направлению оси z     (больше нуля)
                public Zm  : XmlIOsystem.CalclulatorFunction;      // Максимальное расстояние по оси z до материала сечения от центра масс против направления оси z (больше нуля)
                public Yp  : XmlIOsystem.CalclulatorFunction;      // Аналогично Zp, но по оси Y
                public Ym  : XmlIOsystem.CalclulatorFunction;      // Аналогично Zm, но по оси Y
                
                public E   : XmlIOsystem.CalclulatorFunction;      // Модуль Юнга
                public G   : XmlIOsystem.CalclulatorFunction;      // Модуль сдвига
                public aT  : XmlIOsystem.CalclulatorFunction;      // Коэффициент температурного расширения
                
//                lF  : 
                public lFx : XmlIOsystem.CalclulatorFunction;      // Распределённая нагрузка по оси стержня
                public lFy : XmlIOsystem.CalclulatorFunction;      // -//- по локальной оси y
                public lFz : XmlIOsystem.CalclulatorFunction;      // -//- -//- z
                public lMx : XmlIOsystem.CalclulatorFunction;      // Распределённый крутящий момент
                public lMy : XmlIOsystem.CalclulatorFunction;      // Изгибающий помент (вокруг оси y)
                public lMz : XmlIOsystem.CalclulatorFunction;      // -//-              (вокруг оси z)
                
                public T0  : XmlIOsystem.CalclulatorFunction;      // Температура на оси стержня
                public tz  : XmlIOsystem.CalclulatorFunction;      // Коэффициент неравномерности температуры по оси z
                public ty  : XmlIOsystem.CalclulatorFunction;      // Коэффициент неравномерности температуры по оси y
                
                public this(
                            aA  : XmlIOsystem.CalclulatorFunction,
                            aIz : XmlIOsystem.CalclulatorFunction,
                            aIy : XmlIOsystem.CalclulatorFunction,
                            aZp : XmlIOsystem.CalclulatorFunction,
                            aZm : XmlIOsystem.CalclulatorFunction,
                            aYp : XmlIOsystem.CalclulatorFunction,
                            aYm : XmlIOsystem.CalclulatorFunction,
                            
                            aE  : XmlIOsystem.CalclulatorFunction,
                            aG  : XmlIOsystem.CalclulatorFunction,
                            aaT : XmlIOsystem.CalclulatorFunction,
                            
                            
                            alFx : XmlIOsystem.CalclulatorFunction,
                            alFy : XmlIOsystem.CalclulatorFunction,
                            alFz : XmlIOsystem.CalclulatorFunction,
                            alMx : XmlIOsystem.CalclulatorFunction,
                            alMy : XmlIOsystem.CalclulatorFunction,
                            alMz : XmlIOsystem.CalclulatorFunction,
                            
                            aT0 : XmlIOsystem.CalclulatorFunction,
                            atz : XmlIOsystem.CalclulatorFunction,
                            aty : XmlIOsystem.CalclulatorFunction,

                            aN1: Node,
                            aN2: Node,
                            aN3: Node
                            )
                {
                            N1 = aN1;
                            N2 = aN2;
                            N3 = aN3;
                            
                            A  = aA ;
                            Iz = aIz;
                            Iy = aIy;
                            Zp = aZp;
                            Zm = aZm;
                            Yp = aYp;
                            Ym = aYm;
                            
                            E  = aE ;
                            G  = aG ;
                            aT = aaT;
                            
                            
                            lFx = alFx;
                            lFy = alFy;
                            lFz = alFz;
                            lMx = alMx;
                            lMy = alMy;
                            lMz = alMz;
                            
                            T0  = aT0;
                            tz  = atz;
                            ty  = aty;
                            
                            Lv  = N2.Coordinate - N1.Coordinate;
                            L   = Lv.norm();
                }
            }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.