Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/144: Рейтинг темы: голосов - 144, средняя оценка - 4.66
 Аватар для KillJoy
58 / 58 / 29
Регистрация: 21.09.2009
Сообщений: 313
Записей в блоге: 1

Что такое классы и зачем они нужны?

13.09.2011, 09:47. Показов 29253. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Объясните ,что такое классы и зачем они нужны? Я прочитал кучу всего про классы, но так и не понял, зачем они нужны.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2011, 09:47
Ответы с готовыми решениями:

Что такое абстрактные классы и зачем они нужны?
Добрый день, форум, решил немного расширить свои знания c# и начал с абстрактных классов(раньше встречалась иногда эта тема) Может...

Что такое атрибуты и зачем они нужны?
Нужен человек, который может объяснить, что такое атрибуты и зачем они нужны, на как можно более простом языке, как умственно отсталому....

Что такое hash-таблицы, и зачем они нужны?
Обьясните пожалуста по простому что такое хеш таблици и зачем они надо... пытался разобратся с ними сам, но ничего не получилось....

8
Комбинатор
 Аватар для DenQ
980 / 252 / 13
Регистрация: 10.03.2010
Сообщений: 3,556
13.09.2011, 12:37
В первую очередь для создания сложных структур данных
Во вторых, для удобства.
ИМХО
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
13.09.2011, 12:43
KillJoy, Ну представь, тебе нужна машина, приходишь в магазин а тебе:
1. "вон куча деталей валяется, собирай" - это процедурное программирование
2. "вот ключи, а вот машина, садись и езжай" - это классы
как то так )
3
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
13.09.2011, 12:47
Класс - это, своего рода, родитель. Он имеет основные свойства и реакции. Например мама. Человек, умеет готовить, стирать, убираться, ругать, хвалить. Вы - потомок (компонент) умеете все, что и мама, но и еще чуть-чуть (в носу ковырять).

Я так это понял...
1
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
13.09.2011, 13:08
KillJoy, Если говорить более приближенно к программированию, то получается вот что.....
Вот пишешь ты программу, в ней содержится куча каких то функциональных частей, которые ты собираешь воедино для получения какого то результата.
Какие приемущества при использовании классов:
1. Если тебе нужно поменять какой то кусок кода (ну например формат каких то данных вдруг изменился), ты не ищешь по всей программе на что это изменение может повлиять, ты правишь только один из классов.
2. Допустим у тебя появилась задача написать еще одну программу, которая содержит некоторые элементы, которые были в предыдущей. Копируешь ты кусок кода и начинаешь его нудно отлаживать ища откуда какая переменная у тебя бралась и куда что нужно засунуть. Если у тебя эта часть оформлена как класс, то просто копируешь файлы и можешь уже его использовать не вспоминая подробностей расчетов.
ну и т.д.
1
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
13.09.2011, 15:35
Классы позволяют создавать объекты - вещи в себе. Объект имеет внутри данные (хотя вы как его пользователь можете не знать о них == инкапсуляция), и выполняет свое предназначение через методы. Это методы будут компактнее чем обычные процедуры, потому как некоторые данные им передавать уже не нужно - они уже внутри объекта класса.

Упрощенный пример:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Класс Пользователь {
  Строка Имя = '';
  Строка Фамилия = '';
  Число Возраст = 0;
  Число Счет = 0;
 
  Конструктор(Имя, Фамилия, Возраст, Счет)
  {
        Объект.Имя = Имя;
        Объект.Фамилия = Фамилия;
        Объект.Счет = Счет;
  }
 
  ПолучитьСчет()
  {
      вернуть Объект.Счет;
  }
}
Вася = создать Пользователь('Вася', 'Фамилия', 'Возраст', 4303);
 
СчетВаси = Вася.ПолучитьСчет();
// Используем данные о СчетВаси
Теперь представим ситуацию что данный Вася является гланым объектом программы (программа сделала для Васи!) и нам нужно часто получать данные по его счету.

В процедурном стили мы бы просто завели переменную Счет и по коду использовали её. Однако настал тот час когда Вася захотел завести дополнительный счет. И теперь везде где в коде есть упоминание о переменной счет нам надо заменить её на (Счет+ДопСчет). В стиле ООП мы бы сделали так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Класс Пользователь {
  Строка Имя = '';
  Строка Фамилия = '';
  Число Возраст = 0;
  Число Счет = 0;
  Число ДопСчет = 0;
 
  Конструктор(Имя, Фамилия, Возраст, Счет, ДопСчет)
  {
        Объект.Имя = Имя;
        Объект.Фамилия = Фамилия;
        Объект.Счет = Счет;
        Объект.ДопСчет = ДопСчет;
  }
 
  ПолучитьСчет()
  {
      вернуть Объект.Счет+Объект.ДопСчет;
  }
}
Вася = создать Пользователь('Вася', 'Фамилия', 'Возраст', 4303, 352);
В итоге пришлось переписать лишь сам класс (4 строчки), и место где объект создается (1 строчка).

Можно сказать что в данном мы могли бы просто создать процедуру ПолучитьСчет которая использовала бы глобальные данные. Но кто знает, может завтра Вася попросит добавить в программу его друга?

ООП - это ряд ограничений, некий паттерн, который может быть достигнут даже в языках которые не поддерживают ООП. Эти ограничения вполне разумны и помогают писать более грамотный, расширяемый код. Кроме того разграничивание кода на классы позволяет строить модульные системы. Но это не означает что ООП всегда уместен.
3
11 / 11 / 0
Регистрация: 11.08.2010
Сообщений: 130
13.09.2011, 22:36
Я долго писал на С. И я понимаю ваш вопрос. ООП это прежде всего мышление. Ведь одно и тоже можно сделать как и процедурами так и посредством классов. Объяснения в книгах сравнивая классы с объектами реального мира, наверно в начале больше запутают чем что то объяснят. Что бы проникнутся ООП надо взять и писать программы. По началу будет казаться как то дико, особенно когда с ассемблера переходишь. Но со временем начинаешь понимать. Трудно перейти от тотального контроля к сплошной абстракции. Но этот процесс неизбежен. Не от хорошей жизни ООП появилась. Т.к. человеческий мозг ограничен в ресурсах, то невозможно всё держать в голове, вот и придумывают как облегчить себе жизнь, как обеднить сложные структуры в простые.
А если вдаться в конкретику, то класс наверно легче всего сравнить с структурой. Структура надеюсь знакома? Так вот добавим в структуру функции, вот и получили класс. Разумеется это упрощённое представление. Ну а если структуры незнакомы. Тогда...
Самый простой случай представления программы - это функции, которая что то делает.
C#
1
func();
Возьмем пару переменных:
C#
1
int x,y;
И объединяем это в класс:
C#
1
2
3
4
5
class MyClass
{
    func();
    int x,y;
}
Вот и получили класс. А далее можно определять объекты этого класса. Сам класс - это тип. Ну как например int или float. Класс не вставляет в код программы ничего. Он просто говорит как это сделать. А вот строка
C#
1
 MyClas qqq
; - вот это уже кое что делает. А делает оно следующее - резервирует ссылку на наш объект. И всё. Одна ссылка. Если это 32 разрядная система то это 4 байта. Ну и далее мы пишем
C#
1
qqq = new MyClas();
И вот тут заветное слово new как раз и вставляет в наш код программы переменные x,y и реализацию функции func(); Для чего применён такой подход? А мы убиваем 2 зайцев сразу.
1 - мы одной лишь строкой
C#
1
MyClasы qqq = new MyClasы();
добавили в нашу программу кучу функций (в нашем случае одну) и кучу переменных.
2 - появилась возможность писать библиотеки с кучей специально заготовленных для нас функций программистами со всего мира. Ведь все функции в программу не добавишь, да и не нужны они. А так подключил нужную библиотеку, создал объект класса, и получил доступ к нужному функционалу.
P.S. Всё вышеописанное ИМХО и возможно изобилует неточностями и комуто будет резать слух (а может глаз ) так что сильно не бейти
2
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
15.09.2011, 16:42
Вот тут уже обсуждали эту тему.
0
 Аватар для DVSamchuk
1 / 1 / 1
Регистрация: 24.01.2013
Сообщений: 15
30.10.2014, 20:39
Сегодня как раз сам наткнулся на эту проблему, должен сказать (я вижу, что тема уже немолодая, это не ответ на вопрос, а совет таким же заблудшим как я ), что эта тема, как и многие другие, очень хорошо описана в книге "Стивен Прата, язык программирования С++". Сейчас учу РНР, но в этой книге тема лучше описана (суть все равно одна и та же, только синтаксис разный).

Всем рекомендую эту книгу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.10.2014, 20:39
Помогаю со студенческими работами здесь

Что такое комплекты инициализации и зачем они нужны?
Что такое комплекты инициализации и зачем они нужны? Например комплект инициализации к Xerox AltaLink c8030

Что такое атрибуты (dir) и зачем они нужны ?
может быть кто нибутъ объяснит что такое атрибуты и зачем они нужны ? a=1 a Out: 1 dir(a) Out:

Битовые поля структур: что такое и зачем они нужны?
Собственно, вопрос в заголовке. Читал Шилдта, но там эта тема довольно расплывчата. Надеюсь, кто-нибудь сможет доходчиво объяснить.

Что такое указатели? Зачем они нужны и их практичное применение
Здравствуйте, подскажи пожалуйста зачем нужны указатели и в чем их смысл??? Ссылки на другие источники не приму, везде пишется и...

Что такое атрибуты и зачем они? Для чего нужны директивы препроцессора?
Короче,товарищи,задаю вопрос не первый раз,поэтому,если уже отвечали,то прошу прощения,но я забыл уточнить в вопросе то,что мне всё-таки...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru