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

Практическая часть инкапсуляции

04.01.2019, 15:44. Показов 8219. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть практическая часть курса ulern. Сколько уже смотрю на этот код, все не могу понять с чего начать и что делать.
На лекции понял все, как они разбирают задачу, в ней полностью разобрался, но как начал делать самостоятельную практическую часть, просто обучение остановилось. Есть кто знает, что делать, или хотя бы сказать, с чего начать

Задание:
Некто N. написал код, выводящий список устройств, в которых за последний месяц до определенной даты случились критические сбои. К сожалению, N. учился программированию в начале 90-х годов, и не знаком с современными практиками.

Скачайте проект Incapsulation.Failures и помогите N. отрефакторить его код:

Выделите новый статический метод FindDevicesFailedBeforeDate. Метод должен принимать не более 4-х аргументов. В сигнатуре метода не должно быть Dictionary - типов и коллекций с вложенными дженерик - типами, например, List<List<object>>.
Данные из аргументов devices и failureTypes должны быть инкапсулированы в сущности Device и Failure.
IsFailureSerious, очевидно, не на своем месте.
С day и times тоже не все в порядке.
Сигнатуру старого метода сохраните, чтобы проходили тесты. Старый метод должен преобразовывать аргументы и вызывать новый метод.

Исходный код :
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Incapsulation.Failures
{
    public class Common
    {
        public static int IsFailureSerious(int failureType)
        {
            if (failureType%2==0) return 1;
            return 0;
        }
 
 
        public static int Earlier(object[] v, int day, int month, int year)
        {
            int vYear = (int)v[2];
            int vMonth = (int)v[1];
            int vDay = (int)v[0];
            if (vYear < year) return 1;
            if (vYear > year) return 0;
            if (vMonth < month) return 1;
            if (vMonth > month) return 0;
            if (vDay < day) return 1;
            return 0;
        }
    }
    public class ReportMaker
    {
        /// <summary>
        /// </summary>
        /// <param name="day"></param>
        /// <param name="failureTypes">
        /// 0 for unexpected shutdown, 
        /// 1 for short non-responding, 
        /// 2 for hardware failures, 
        /// 3 for connection problems
        /// </param>
        /// <param name="deviceId"></param>
        /// <param name="times"></param>
        /// <param name="devices"></param>
        /// <returns></returns>
        public static List<string> FindDevicesFailedBeforeDateObsolete(
            int day,
            int month,
            int year,
            int[] failureTypes, 
            int[] deviceId, 
            object[][] times,
            List<Dictionary<string, object>> devices)
        {
 
            var problematicDevices = new HashSet<int>();
            for (int i = 0; i < failureTypes.Length; i++)
                if (Common.IsFailureSerious(failureTypes[i])==1 && Common.Earlier(times[i], day, month, year)==1)
                    problematicDevices.Add(deviceId[i]);
 
            var result = new List<string>();
            foreach (var device in devices)
                if (problematicDevices.Contains((int)device["DeviceId"]))
                    result.Add(device["Name"] as string);
 
            return result;
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2019, 15:44
Ответы с готовыми решениями:

Практическая часть курсовой работы

Практическая часть дипломной работы "распознавание образов"
Пишу дипломную работу на тему распознавание образов, с водой все понятно, добралс ядо практической части и волосы дыбом на голове встают,...

Практическая часть к диплому
Здравствуйте, уважаемые пользователи киберфорума. У меня есть тема диплома &quot;Разработка подсистемы обеспечения безопасности каналов...

3
HF
 Аватар для HF
1307 / 885 / 200
Регистрация: 09.09.2011
Сообщений: 2,597
Записей в блоге: 2
04.01.2019, 20:59
Цитата Сообщение от politskovoyvo Посмотреть сообщение
Сколько уже смотрю на этот код, все не могу понять с чего начать и что делать.
Основная цель задачи - рефакторинг. И в описании всё даже пошагово написано на что обратить внимание.
(Задачу я сдал, поэтому) Могу только немного подсказать (раз вы даже решили спросить о помощи):
- посмотрите на параметры метода, который нужно переписать - FindDevicesFailedBeforeDateObsolete
- вам должно броситься в глаза что часть параметров можно переписать так, чтобы они были более компактнее или более точно передавали суть
Как например, что там в этом массиве failureTypes ? какие там могут быть значения? что такое номер 1 или 2? Об этом написано в комментарии, а надо чтобы это было везде понятно и удобно.
В итоге у вас должен получиться новый метод, с минимумом параметров.
0
2 / 2 / 0
Регистрация: 13.05.2016
Сообщений: 5
03.07.2019, 09:24
5 баллов из 50 дадут :-)
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Incapsulation.Failures
{
    public class Common
    {
        public static int ComeEarlier(object[] v, int day, int month, int year)
        {
            int vYear = (int)v[2];
            int vMonth = (int)v[1];
            int vDay = (int)v[0];
            if (vYear < year) return 1;
            if (vYear > year) return 0;
            if (vMonth < month) return 1;
            if (vMonth > month) return 0;
            if (vDay < day) return 1;
            return 0;
        }
    }
 
    public class ReportMaker
    {
        /// <summary>
        /// </summary>
        /// <param name="day"></param>
        /// <param name="failureTypes">
        /// 0 for unexpected shutdown, 
        /// 1 for short non-responding, 
        /// 2 for hardware failures, 
        /// 3 for connection problems
        /// </param>
        /// <param name="deviceId"></param>
        /// <param name="times"></param>
        /// <param name="devices"></param>
        /// <returns></returns>
        public static List<string> FindDevicesFailedBeforeDateObsolete
            (
                int day,
                int month,
                int year,
                int[] failureTypes,
                int[] deviceId,
                object[][] times,
                List<Dictionary<string, object>> devices
            )
        {
            return FindDevicesFailedBeforeDate(new DateTime(year, month, day), 
                                               new Device(failureTypes, deviceId, times, devices));
        }
 
        private static List<string> FindDevicesFailedBeforeDate(DateTime d, Device a)
        {
            int day = d.Day;
            int month = d.Month;
            int year = d.Year;
            int[] failureTypes = a.FailureTypes;
            int[] deviceId = a.DeviceId;
            object[][] times = a.Times;
            List<Dictionary<string, object>> devices = a.Devices;
            var problematicDevices = new HashSet<int>();
            for (int i = 0; i < failureTypes.Length; i++)
                if (IsFailureSerious(failureTypes[i]) == 1 && Common.ComeEarlier(times[i], day, month, year) == 1)
                    problematicDevices.Add(deviceId[i]);
 
            var result = new List<string>();
            foreach (var device in devices)
                if (problematicDevices.Contains((int)device["DeviceId"]))
                    result.Add(device["Name"] as string);
 
            return result;
        }
 
        public static int IsFailureSerious(int failureType)
        {
            if (failureType % 2 == 0) return 1;
            return 0;
        }
 
        enum FailureType : int
        {
            UnexpectedShutdown,
            ShortNonResponding,
            HardwareFailures,
            ConnectionProblems
        }
 
        class Device
        {
            public int[] FailureTypes;
            public int[] DeviceId;
            public object[][] Times;
            public List<Dictionary<string, object>> Devices;
            public Device(int[] failureTypes, int[] deviceId, 
                          object[][] times, List<Dictionary<string, 
                          object>> devices)
            {
                this.FailureTypes = failureTypes;
                this.DeviceId = deviceId;
                this.Times = times;
                this.Devices = devices;
            }
        }
    }
}
1
HF
 Аватар для HF
1307 / 885 / 200
Регистрация: 09.09.2011
Сообщений: 2,597
Записей в блоге: 2
03.07.2019, 10:07
Цитата Сообщение от dmloki Посмотреть сообщение
5 баллов из 50 дадут :-)
Вы не помогаете, а оказываете ненужную услугу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.07.2019, 10:07
Помогаю со студенческими работами здесь

Практическая часть дипломной работы
Пишу дипломную работу на тему распознавание образов, с водой все понятно, добралс ядо практической части и волосы дыбом на голове встают,...

Попытка Инкапсуляции
Почему при попытке описать метод класса за его пределами, компилятор выдает ошибку? class A { int F; public: void f(); }; ...

Нарушение инкапсуляции метода
Уважаемые, опытные, подскажите, чем может грозить нарушение инкапсуляции метода класса, кроме того как он будет бесполезно...

Нарушен принцип инкапсуляции
Под спойлером ссылка на цитату из книги Хорстмана. Не могу до конца разобраться с этим...вроде объявили мы метод как private, но говорят,...

В чем преимущество инкапсуляции
всем доброго времени!!! вот обычный код создания поля public object prop; но все рекомендуют делать так (т.е. инкапсулировать поле) ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru