Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/35: Рейтинг темы: голосов - 35, средняя оценка - 4.74
0 / 0 / 1
Регистрация: 03.07.2013
Сообщений: 8

Реализация класса Number

03.07.2013, 11:43. Показов 7257. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть следующее задание: Создать абстрактный класс Number c виртуальными методами, реализующими арифметические операции. На его основе реализовать классы Integer и Real.
Создать класс Series (набор), содержащий массив/параметризованную коллекцию объектов этих классов в динамической памяти. Предусмотреть возможность вывода характеристик объектов списка. Написать демонстрационную программу, в которой будут использоваться все методы классов.
Дополнительное задание: дополнить класс методами сортировки по некоторому критерию, вывода в файл и считывания из файла.

Реализовал классы следующим образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Laba10
{
    abstract class Number
    {
        public int i;
        public double r;
        public bool type;
 
        public abstract Number Sum(Number a);
        public abstract Number Sub(Number a);
        public abstract Number Mult(Number a);
        public abstract Number Div(Number a);
 
    }
 
    class Integer : Number
    {
        public Integer()
        {
            this.i = 0;
            type = true;
        }
 
        public Integer(int i)
        {
            this.i = i;
            type = true;
        }
 
        public override Number Sum(Number a)
        {
            Number t = new Integer(a.i + i);
            return t;
        }
 
        public override Number Sub(Number a)
        {
            Number t = new Integer(i - a.i);
            return t;
        }
        public override Number Mult(Number a)
        {
            Number t = new Integer(a.i * i);
            return t;
        }
        public override Number Div(Number a)
        {
            Number t = new Integer((int) (i / a.i));
            return t;
        }
        public override string ToString()
        {
            return i + " тип Integer";
        }
    }
 
    class Real : Number
    {
        public Real()
        {
            this.r = 0.0;
            type = false;
        }
 
        public Real(double r)
        {
            this.r = r;
            type = false;
        }
 
        public override Number Sum(Number a)
        {
            Number t = new Real(a.r + r);
            return t;
        }
 
        public override Number Sub(Number a)
        {
            Number t = new Real(r - a.r);
            return t;
        }
        public override Number Mult(Number a)
        {
            Number t = new Real(a.r * r);
            return t;
        }
        public override Number Div(Number a)
        {
            Number t = new Real(r / a.r);
            return t;
        }
        public override string ToString()
        {
            return r + " тип Real";
        }
    }
 
    class Series 
    {
        Number[] s;
        public int Length { get; private set; }
 
        public Series(int size)
        {
            s = new Number[size];
            Length = size;
        }
        public Number this[int index]
        {
            get
            {
                return s[index];
            }
            set
            {
                s[index] = value;
            }
        }
        
        public void SortUp()
        {
            Number t;
            for (int count = 0; count < Length; count++)
                for (int k = count; k < Length; k++)
                {
                    bool f = false;
                    if (s[count].type == s[k].type & s[count].type)
                        if (s[count].i > s[k].i) { f = true; }
                    if (s[count].type == s[k].type & !(s[count].type))
                        if (s[count].r > s[k].r) { f = true; }
                    if (s[count].type != s[k].type & s[count].type)
                        if (s[count].i > s[k].r) { f = true; }
                    if (s[count].type != s[k].type & !(s[count].type))
                        if (s[count].r > s[k].i) { f = true; }
                    if (f)
                    {
                        t = s[count];
                        s[count] = s[k];
                        s[k] = t;
                    }
 
                }
        }
 
        public void SortDown()
        {
            Number t;
            for (int count = 0; count < Length; count++)
                for (int k = count; k < Length; k++)
                {
                    bool f = false;
                    if (s[count].type == s[k].type & s[count].type)
                        if (s[count].i < s[k].i) { f = true; }
                    if (s[count].type == s[k].type & !(s[count].type))
                        if (s[count].r < s[k].r) { f = true; }
                    if (s[count].type != s[k].type & s[count].type)
                        if (s[count].i < s[k].r) { f = true; }
                    if (s[count].type != s[k].type & !(s[count].type))
                        if (s[count].r < s[k].i) { f = true; }
                    if (f)
                    {
                        t = s[count];
                        s[count] = s[k];
                        s[k] = t;
                    }
 
                }
        }
 
    }
}
Но что-то как-то мне не особо нравится, знающие люди проверьте на предмет правильной реализации поставленной задачи, если есть более лучшие варианты буду признателен, желательно с примером кода и объяснением. Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.07.2013, 11:43
Ответы с готовыми решениями:

Int number = 2; Console.WriteLine(++number - number-- * ++number); Выводит -6; Как ?
Знающие, объясните, пожалуйста. Каким чудом тут получается -6 ? O_o int number = 2; Console.WriteLine(++number - number-- *...

Что значит эта строка return number == 1 ? 1 : (Foo(number - 1) + Foo(number - 2); ?
return number == 1 ? 1 : (Foo(number - 1) + Foo(number - 2));

Реализация класса с свойствами - ссылками на объекты класса
Всем привет, пожалуйста подскажите реализацию такой интересной вещи, что написана в заголовке. Вот моя задача (для написания кое-какого...

15
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
03.07.2013, 11:53
почему не используете принцип инкапсуляции?

Добавлено через 2 минуты
Цитата Сообщение от KavunVP Посмотреть сообщение
public int i;
* * * * public double r;
* * * * public bool type;
можно было бы

C#
1
2
3
public int I{get;set;}
public double R{get;set;}
public bool Type{get;set;}
Добавлено через 3 минуты
сортировку тоже явно можно переделать
1
0 / 0 / 1
Регистрация: 03.07.2013
Сообщений: 8
03.07.2013, 12:23  [ТС]
Цитата Сообщение от 23Alex24 Посмотреть сообщение
почему не используете принцип инкапсуляции?

можно было бы

C#
1
2
3
public int I{get;set;}
public double R{get;set;}
public bool Type{get;set;}
По сути, get;set здесь особо то и не надо, на прямую работать с этими переменные из программы не надо, значения получают при использовании конструктора, по этому думаю protected здесь будет вполне достаточно

Цитата Сообщение от 23Alex24 Посмотреть сообщение
сортировку тоже явно можно переделать
Вот тут не знаю, использовал метод пузырька, а условия используются из-за того что для подклассов данные хранятся в разных переменных и узнать в каком случае брать конкретную переменную как раз то и надо строить такие условия.

Из этого следует вопрос, а нельзя ли как то в базовом классе определить одну переменную и использовать её в одном случае как int, а в другом как double, короче реализовать ее как var?
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
03.07.2013, 13:57
Во-первых, сортировку по какому принципу определяете только вы, правильно?) во-вторых вам еще надо считывание и запись в файл делать, как я понял это одно доп задание, я правильно понимаю?

Добавлено через 8 минут
Вообще что вам мешает сконвертить значение в какой-то тип, например long и сравнивать их? там никаких проверок не потребуется на сравнение типов и т.д., а сортировать можно по банальному возрастанию или убыванию
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
03.07.2013, 14:18
Цитата Сообщение от 23Alex24 Посмотреть сообщение
почему не используете принцип инкапсуляции?
можно было бы
C#
1
2
3
public int I{get;set;}
public double R{get;set;}
public bool Type{get;set;}
Вы тоже не используете принцип инкапсуляции в этом коде.
Цитата Сообщение от KavunVP Посмотреть сообщение
а нельзя ли как то в базовом классе определить одну переменную и использовать её в одном случае как int, а в другом как double, короче реализовать ее как var?
Можно использовать обобщённые классы; var - это синтаксический сахар, под ней скрывается определённый тип, а не какой угодно. Возможно вы имели в виду dynamic, но здесь это будет как костыль.
Уберите i, r, type и используйте отдельную переменную для каждого класса для хранения значения.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
03.07.2013, 16:10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
using System;
 
namespace ConsoleApplication
{
    internal class Program
    {
        private static void Main()
        {
            var series = new Series<Integer>(5);
            series[0] = new Integer(2);
            series[1] = new Integer(3);
            series[2] = new Integer(4);
            series[3] = new Integer(1);
            series[4] = new Integer(5);
            series.OrderBy();
 
            for (var i = 0; i < series.Length; i++)
                Console.WriteLine(series[i]);
        }
    }
 
    public class Series<T>
        where T : class, IComparable<T>
    {
        private readonly T[] array;
 
        public Series(int size)
        {
            array = new T[size];
        }
 
        public int Length
        {
            get { return array.Length; }
        }
 
        public void OrderBy()
        {
            Sort((x, y) => x.CompareTo(y) > 0);
        }
 
        public void OrderByDesc()
        {
            Sort((x, y) => x.CompareTo(y) < 0);
        }
 
        protected void Sort(Func<T, T, bool> func)
        {
            for (var i = 0; i < Length - 1; i++)
                for (var j = i + 1; j < Length; j++)
                    if (func(array[i], array[j]))
                    {
                        var temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
        }
 
        public T this[int index]
        {
            get { return array[index]; }
            set { array[index] = value; }
        }
    }
 
    public class Real : Number<double>
    {
        public Real(double value = 0)
        {
            Value = value;
        }
 
        public override Number<double> Sum(Number<double> other)
        {
            return new Real(Value + other.Value);
        }
 
        public override Number<double> Sub(Number<double> other)
        {
            return new Real(Value - other.Value);
        }
 
        public override Number<double> Mul(Number<double> other)
        {
            return new Real(Value * other.Value);
        }
 
        public override Number<double> Div(Number<double> other)
        {
            return new Real(Value / other.Value);
        }
    }
 
    public class Integer : Number<int>
    {
        public Integer(int value = 0)
        {
            Value = value;
        }
 
        public override Number<int> Sum(Number<int> other)
        {
            return new Integer(Value + other.Value);
        }
 
        public override Number<int> Sub(Number<int> other)
        {
            return new Integer(Value - other.Value);
        }
 
        public override Number<int> Mul(Number<int> other)
        {
            return new Integer(Value * other.Value);
        }
 
        public override Number<int> Div(Number<int> other)
        {
            return new Integer(Value / other.Value);
        }
    }
 
    public abstract class Number<T> : IComparable<Number<T>>
        where T : struct, IComparable<T>
    {
        public T Value { get; protected set; }
 
        public abstract Number<T> Sum(Number<T> other);
        public abstract Number<T> Sub(Number<T> other);
        public abstract Number<T> Mul(Number<T> other);
        public abstract Number<T> Div(Number<T> other);
 
        public int CompareTo(Number<T> other)
        {
            return Value.CompareTo(other.Value);
        }
 
        public override string ToString()
        {
            return string.Format("{0} тип {1}", Value, GetType().Name);
        }
    }
}
2
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
03.07.2013, 20:01
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Вы тоже не используете принцип инкапсуляции в этом коде.
Нет, здесь инкапсуляция соблюдается, с чего вы взяли, что нет?
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
03.07.2013, 20:41
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Нет, здесь инкапсуляция соблюдается, с чего вы взяли, что нет?
Инкапсуляция — механизм языка программирования, который ограничивает доступ к составляющим объект компонентам (методам и переменным), делает их приватными, т.е. доступными только внутри объекта.
Вы оставили свойства открытыми, как и у TC, а по принципам инкапсуляции их нужно сделать защищёнными или закрытыми, ведь автор не хочет, чтобы их использовали вне класса.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.07.2013, 22:18
I2um1, только OrderBy - плохая затея, как метода, не возвращающего значения. лучше так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    public class Series<T>
        where T : class, IComparable<T>
    {
        private readonly T[] array;
 
        public Series(int size)
        {
            array = new T[size];
        }
 
        public int Length
        {
            get { return array.Length; }
        }
 
        public void Sort()
        {
            Sort((x, y) => x.CompareTo(y) > 0);
        }
 
        public void Sort(IComparer<T> comparer )
        {
            Sort((x, y) => comparer.Compare(x, y) > 0);
        }
 
        protected void Sort(Func<T, T, bool> func)
        {
            for (var i = 0; i < Length - 1; i++)
                for (var j = i + 1; j < Length; j++)
                    if (func(array[i], array[j]))
                    {
                        var temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
        }
 
        public T this[int index]
        {
            get { return array[index]; }
            set { array[index] = value; }
        }
    }
заодно сделали задание с произвольной сортировкой.

Далее, класс Number можно проапгрейдить, добавив операторы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    public abstract class Number<T> : IComparable<Number<T>>
        where T : struct, IComparable<T>
    {
        public T Value { get; protected set; }
 
        public abstract Number<T> Sum(Number<T> other);
        public abstract Number<T> Sub(Number<T> other);
        public abstract Number<T> Mul(Number<T> other);
        public abstract Number<T> Div(Number<T> other);
 
        public int CompareTo(Number<T> other)
        {
            return Value.CompareTo(other.Value);
        }
 
        public override string ToString()
        {
            return string.Format("{0} тип {1}", Value, GetType().Name);
        }
 
        public static Number<T> operator +(Number<T> first, Number<T> second)
        {
            return first.Sum(second);
        }
 
        public static Number<T> operator -(Number<T> first, Number<T> second)
        {
            return first.Sub(second);
        }
 
        public static Number<T> operator *(Number<T> first, Number<T> second)
        {
            return first.Mul(second);
        }
 
        public static Number<T> operator /(Number<T> first, Number<T> second)
        {
            return first.Div(second);
        }
    }
а так супер, работа большая и красивая.
2
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
03.07.2013, 22:25
Psilon, ну да, так лучше. Впрочем, это слишком искусственный случай делать обертки над стандартными типами данных.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.07.2013, 22:33
I2um1, ну, как учебное задание не такое уж тупое, поверьте. Я встречал преподов, которые требовали делать иерархию классов точка => линия => треугольник => тетраэдр и запрещали пользоваться композицией (не наследовать линию от точки, а проводить её по двум точкам), (авто)/свойствами, а только методы Get/Put и backfield. Так что не все так плохо
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
04.07.2013, 05:51
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Вы оставили свойства открытыми, как и у TC, а по принципам инкапсуляции их нужно сделать защищёнными или закрытыми, ведь автор не хочет, чтобы их использовали вне класса.
Вы не понимаете принцип инкапсуляции, по вашему все свойства и методы должны быть защищенными или закрытыми? тогда как ими будут пользоваться скажите на милость? Инкапсуляция - от слова капсула, в данном случае автоматические свойства являются капсулой для полей, и мы НЕ можем напрямую манипулировать полями и делаем это через свойства, и свойство может быть с любым модификатором доступа в данном случае, а вот поля получаются приватными, вот здесь то мы как раз и защищаем или делаем скрытыми их )
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
04.07.2013, 09:02
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Вы не понимаете принцип инкапсуляции
Не надо поспешных утверждений, то же самое я могу сказать про вас.
Цитата Сообщение от 23Alex24 Посмотреть сообщение
по вашему все свойства и методы должны быть защищенными или закрытыми?
Нет, что за глупость. Эти поля не должны быть видимы вне класса (по задумке автора), и их нужно сделать закрытыми или защищёнными. Вот это принцип инкапсуляции.
Цитата Сообщение от 23Alex24 Посмотреть сообщение
в данном случае автоматические свойства являются капсулой для полей, и мы НЕ можем напрямую манипулировать полями и делаем это через свойства
Пишете
C#
1
public int I{get;set;}
Компилируется в
C#
1
2
3
4
5
6
7
8
9
private int _I;
 
public int get_I() {
    return _I;
}
 
public void set_I(int value) {
    _I = value;
}
Что по смыслу тоже самое, что и
C#
1
public int I;
Добавив автоматическую реализацию акцессоров свойства, мы получаем тоже самое, что было бы вообще без их использования. Эти переменные при использовании класса будут использоваться также, как если бы в языке вообще не было инкапсуляции - они будут доступны всем типам подряд. И в чём тут инкапсуляция? Таким путём мы не ограничили доступ к переменной - мы надели на неё рюшечки, но используем также. Здесь нужно говорить не об инкапсуляции, о её отсутствии.
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
04.07.2013, 09:09
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Добавив автоматическую реализацию акцессоров свойства, мы получаем тоже самое, что было бы вообще без их использования. Эти переменные при использовании класса будут использоваться также, как если бы в языке вообще не было инкапсуляции - они будут доступны всем типам подряд. И в чём тут инкапсуляция? Таким путём мы не ограничили доступ к переменной - мы надели на неё рюшечки, но используем также. Здесь нужно говорить не об инкапсуляции, о её отсутствии.

Бред, это не тоже самое, знаете почему? потому что если вы напрямую сделаете так:

C#
1
public int I;
то в будущем, если вдруг понадобится какая-то логика при получении или записи этого поля, то вам придется перелопатить код, чтобы эту логику добавить, а со свойством этого делать не придется, мы спокойно сможем объявить нужное нам поле, и в свойстве добавить логику, ничего перелопачивать не придется

Поле там приватное все же присутствует, и НАПРЯМУЮ к нему ДОСТУПА НЕТ, доступ осуществляется через свойство, так что принцип инкапсуляции соблюдается, то что там нет никакой спец. логики еще НЕ ЗНАЧИТ, что тут нет инкапсуляции
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.07.2013, 11:46
tezaurismosis, Алекс прав.
1
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
04.07.2013, 14:17
Ok, вы меня переубедили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.07.2013, 14:17
Помогаю со студенческими работами здесь

Fatal error - Invalid parameter number: number of bound variables does not match number of tokens'
$pass = md5($_POST); $email = $_POST; $login = $_POST; $sex = $_POST; $avatar = $_POST; ...

Invalid parameter number: number of bound variables does not match number of tokens
запрос $conn = connect_to_db(); $stmt = $conn-&gt;prepare(&quot;INSERT INTO brandaccounts (UserID, BrandID, LoginEmail, LoginID,...

Invalid parameter number: number of bound variables does not match number of tokens
Не могу решить ошибку: Invalid parameter number: number of bound variables does not match number of tokens Указывает на : if...

Демонстрация работы с объектами класса Number
Cоздать абстрактный базовый класс Number с виртуальными методами - арифметическими операциями. Создать производные классы Integer и Real....

Number of variables doesn't match number of parameters in prepared statement
Собственно, код $query = mysqli_prepare($db, &quot;SELECT * FROM `users_db` WHERE `user_name`='?' || `e_mail`='?'&quot;); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru