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

Как часто и для чего используются классы? Что-то из разряда ООП

15.06.2024, 11:18. Показов 529. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наверное стоило бы для начала разобраться в самом языке, но мне слишком интересно. Скажите, прям всегда везде и для всего обычно используется отдельный класс? Получается, если ты хочешь что-то сделать/получить, то пишешь класс с нужным методом, а затем создаешь объект и используешь этот самый метод?
Приведу пример того, как в моем понимании искались бы простые числа(понятно, что можно и проще в маленькой программке на 20 строк):
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
class Program
{
    static void Main() 
    {
        getPrimes getter = new getPrimes();
        int[] primes = getter.Get(100);
        foreach (int i in primes) 
        {
            Console.WriteLine(i);
        }
 
    }
}
 
class getPrimes 
{
    public int[] Get(int n) 
    {
        int[] nums = new int[n];
        int count = 0;
        int nextFree = 0;
        for (int i = 0; i < n; i++)
        {
            nums[i] = i;
        }
        nums[1] = 0;
        foreach (int j in nums)
        {
            if (j != 0)
            {
                for (int k = 2 * j; k < n; k += j)
                {
                    nums[k] = 0;
                }
                count++;
            }
        }
        int[] primers = new int[count];
        foreach (int k in nums)
        {
            if (k != 0)
            {
                primers[nextFree] = k;
                nextFree++;
            }
 
 
        }
        return primers;
    }
}
Выходит:
-Создал класс
-Потом объект
-В нем метод
-Используешь всё это где надо, не смотря под капот

Или нет? Как бы вы тогда всё организовали?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2024, 11:18
Ответы с готовыми решениями:

Что такое полис и конечные автоматы и для чего используются в с++?
ОЧЕНЬ ХОЧУ ЗНАТЬ. ПОМОГИТЕ!!!!!!!!!

Для чего нужна термопаста? И как часто ее нужно заменять?
Для чего нужна термопаста? И как часто ее нужно заменять?

для чего используются
Вопрос для чего используются private member variables numItems и allocatedItems и какова цель private cartItems? в следующем...

6
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
15.06.2024, 14:55
Лучший ответ Сообщение было отмечено alex150051 как решение

Решение

Цитата Сообщение от alex150051 Посмотреть сообщение
Наверное стоило бы для начала разобраться в самом языке
Стоило. Очень стоило. Вопрос "на кой нужны интерфейсы" хорошо раскрывается на чем-то более крупном. Чтобы написать что-то крупное, нужно знать достаточно хороший объем возможностей C# (на одних if-else далеко не уедешь).

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

Цитата Сообщение от alex150051 Посмотреть сообщение
Скажите, прям всегда везде и для всего обычно используется отдельный класс?
Либо класс, либо структуры. Оба решают вопрос инкапсуляции (объединить общую логику в едином месте, с сокрытием реализации внутри). И реализуют они методЫ (включая такие частные случаи как свойства и ивенты), порой интерфейсы (контракт этих самых методов, включая частные случаи)

Такой пример: вам нужно реализовать консольный калькулятор, который умеет записывать в лог скажем в файл. Есть возможность всё единой простыней через switch. А можно разбить на два класса: класс отвечающий за расчеты (даже с тем же switch внутри) и класс отвечающий за запись в файл. Теперь если нужно править логику рассчетов, человеку нужно просмотреть только один класс не сильно вникая что отвечает за запись в файл. Если нужно будет поправить только логику логирования (поменять формат, записывать в базу-данных) -- не задевается логика рассчетов.

Это ещё позитивно сказывается на случае, когда работает над проектом больше одного человека (а обычно оно так и есть).


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Писать код в 20 строчек простыней тоже прийдется. Либо внутри какой-то класса, где по хорошему нужно разбить, но нет времени, либо набирая тулзу/прототип где нет смысла наводить красоту.

Также ООП не всегда положительно влияет на перфоманс. В исключительных проектах или кусках программы это может быть критическим, и там переходят на процедурное программирование.
2
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
15.06.2024, 15:59
Цитата Сообщение от alex150051 Посмотреть сообщение
Скажите, прям всегда везде и для всего обычно используется отдельный класс?
Нет. Например в приведенном примере можно было обойтись static методом.

Цитата Сообщение от alex150051 Посмотреть сообщение
Получается, если ты хочешь что-то сделать/получить, то пишешь класс с нужным методом, а затем создаешь объект и используешь этот самый метод?
По ситуации. Класс полезен для группировки связанных чем-то общим методов. И когда этим методам необходимо общее состояние - поля/свойства.

Цитата Сообщение от alex150051 Посмотреть сообщение
Выходит:
-Создал класс
-Потом объект
-В нем метод
-Используешь всё это где надо, не смотря под капот
Не всегда. Вот например вы вызываете метод WriteLine из класса Console без всяких объектов.

Цитата Сообщение от alex150051 Посмотреть сообщение
Или нет? Как бы вы тогда всё организовали?
В данном случае я бы просто добавил static метод в класс Program. Отдельный класс тут не несет пользы.

Цитата Сообщение от alex150051 Посмотреть сообщение
Наверное стоило бы для начала разобраться в самом языке
Даже не в языке, а скорее в ООП. Если вы в таком стиле не писали, то понадобится время и практика чтобы уловить суть.
2
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
15.06.2024, 16:45

Не по теме:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Например в приведенном примере можно было обойтись static методом.
технически они тоже описываются в классе. Я думаю вопрос всё про "отдельный класс".



Кстати "да" -- как верно пометили, есть же статика, которая не требует создания отельных экземпляров. Те же методы расширения очень часто используются, особенно всякие linq.
1
16 / 17 / 0
Регистрация: 12.01.2022
Сообщений: 141
15.06.2024, 16:55
Цитата Сообщение от Wolfdp Посмотреть сообщение
Оба решают вопрос инкапсуляции (объединить общую логику в едином месте, с сокрытием реализации внутри)
Ваши бы слова да людям в уши!
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
15.06.2024, 16:59
Цитата Сообщение от Wolfdp Посмотреть сообщение
технически они тоже описываются в классе
Разумеется. Даже если использовать top level statements, то методы будут в классе.

Цитата Сообщение от Wolfdp Посмотреть сообщение
Я думаю вопрос всё про "отдельный класс".
Я тоже так понял вопрос. Далее в своем ответе я уточнил что можно добавить static метод в уже существующий класс Program. Таким образом не нужно ни создавать новый класс ни его экземпляр.
1
22 / 17 / 5
Регистрация: 03.03.2022
Сообщений: 77
15.06.2024, 17:42
По своему опыту скажу, лично я создавал отдельный статический класс, который отправлял запросы к моему API, чтоб в методах и обработчиках событий не прописывать один и тот же код, даже использовал обобщение, когда нужно получить список типа условных классов A, B, C: вместо того, чтоб создавать однотипные методы, использовал буковку T, где динамически подставлялось необходимый тип, указывающий при вызове такого метода.
И это я ведь даже не изучил популярные паттерны проектирования, не научился грамотно структурировать код, единственное что хорошо у меня получается - замечать однотипный повторяющийся код и стараться избавиться от него, заныкав в метод или даже в отдельный класс.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2024, 17:42
Помогаю со студенческими работами здесь

Для чего используются методы?
Ответ:

Для чего используются тики
Решил почитать документацию по php и наткнулся на такую вещь: declare(ticks=1); // Функция, исполняемая при каждом тике ...

Для чего используются ActionList
для чего можна использовать ActionList памагите естли можно напишите с кодами

Для чего используются триггеры?
одна таблица содержит количество рабочих. вторая таблица содержит инфу о рабочих. если ко второй будем добавлять поле или удалять, то...

Для чего используются песочницы
Для чего используются песочницы? Я просто только начинаю изучать и еще толком ничего не знаю. На каждый вопрос создавайте по одной...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru