|
2 / 2 / 0
Регистрация: 22.08.2013
Сообщений: 38
|
|
Объяснение принципов ООП22.08.2013, 11:26. Показов 9450. Ответов 69
Метки нет (Все метки)
Простите если пишу не в той ветке. Уважаемые старшие братья, великие гуру, наставники и просто хорошие люди разбирающиеся в данном вопросе, не могли бы вы объяснить чайнику принципы ООП.
Когда в далеком 1997 г. в школе мне довелось встретиться с BASIC, что там была за версия мне не ведомо, но линейные алгоритмы, несколько ветвителей и пару циклов плюс отдельно написанная функция или процедура в последующем вызванная в главном алгоритме программы рождали в моем мозгу четкое представление что происходит. Теперь пришло время объяснить все это ребенку и пока мы ковыряемся в ПИКТОМИРе, мир в моих глазах не рушиться. Но ныне время ООП и тут в моем разуме рождается хаос Классы, Экземпляры, Методы - ужас! (не корите меня что я не читаю книг, читаю, но мой закоренелый мозг не в состоянии воспринять новый мир, а очень надо). Поначалу все шло хорошо, действительно удобно: создаем Класс с методами (как я понимаю, это те же функции и процедуры), потом создаем объект и интенсивно используем методы, которые он имеет как представитель класса. Ну действительно, чтобы убить зомби, берем объект "пистолет" относящийся к классу "пистолеты" и используем метод "выстрел". (извините что пользуюсь такими примерами). Но всю логику ломают методы с пометкой static, это что за зверь????? В умных книжках умными людьми написано, что якобы такой метод можно вызвать без создания экземпляра класса!!! Сразу в голове возникает следующее: "Понятно! А на хера???" У умных людей есть и на это ответ: "Чтобы писать меньше кода!" - "Логично! А за каким тогда "нестатические методы"??? На фиг тогда писать эти классы и создавать экземпляры??? И на хрена тогда вообще это ООП???" Пожалуйста, не поможете разобраться с этими статическими методами и в частотности с "main" может на примере с теми же зомби, чего мы берем и откуда если нет экземпляра????
0
|
|
| 22.08.2013, 11:26 | |
|
Ответы с готовыми решениями:
69
Нужна идея по реализации принципов ООП Объяснение принципов построения сети
|
|
2 / 2 / 0
Регистрация: 22.08.2013
Сообщений: 38
|
|||||||||||||||||||||
| 31.08.2013, 10:00 [ТС] | |||||||||||||||||||||
|
Позвольте вернуться к теме static...
Только мне модификатор static стал родным и я решил использовать его как обычную процедуру, вызванную из другой части программы, как натолкнулся еще на какую-то непонятную хрень. (напомню, что я ламер в области программирования поэтому не ругайтесь громко, я понять пытаюсь) Сначала все выглядело логично Создаем статический метод и статическую переменную с которой он будет работать.
Создаем нестатический метод
Кто-нибудь еще раз может объяснить человеку далекому от программирования смысл этих статиков? И разницу в способах вызова метода приведенного выше? И чего курили создатели java когда писали компилятор?
0
|
|||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 14.05.2013
Сообщений: 6
|
||||||
| 31.08.2013, 10:24 | ||||||
|
Переменные, объявляемые как static, по существу являются глобальными. Когда же объекты объявляются в своем классе, то копия переменной типа static не создается. Вместо этого все экземпляры класса совместно пользуются одной и той же переменной типа static. Такая переменная инициализируется перед ее применением в классе. Когда же ее инициализатор не указан явно, то она инициализируется нулевым значением.
Метод типа static отличается от обычного метода тем, что его можно вызывать по имени его класса, не создавая экземпляр объекта этого класса.
0
|
||||||
|
2 / 2 / 0
Регистрация: 22.08.2013
Сообщений: 38
|
||
| 31.08.2013, 12:35 [ТС] | ||
|
То есть в чем разница если я вызываю статический метод через класс Класс.Метод(); И если я вызываю нестатический метод через создание безымянного объекта. new Класс().Метод();
0
|
||
|
Модератор
2939 / 1802 / 180
Регистрация: 19.02.2011
Сообщений: 6,559
|
|
| 31.08.2013, 12:48 | |
|
Сколько у машины колес? Обычно 4, бывает, больше, бывает меньше. Но каждое колесо - экземпляр класса, каждое должно существовать независимо. Статика - дополнительный функционал, возможность, инструмент, к ООП, по большому счету, отношения не имеет.
1
|
|
|
1 / 1 / 0
Регистрация: 14.05.2013
Сообщений: 6
|
||||||
| 31.08.2013, 13:00 | ||||||
|
Статический метод не имеет доступа к нестатическим переменным.
Добавлено через 6 минут Класс.Метод()- удобен, когда требуется оперировать данными, которые являются общими для всех экземпляров данного класса.
0
|
||||||
|
2 / 2 / 0
Регистрация: 22.08.2013
Сообщений: 38
|
||
| 31.08.2013, 13:35 [ТС] | ||
|
А что касательно вызова метода через безымянный экземпляр new Класс().Метод();? Для меня это некая аналогия статической функции только через ООП реализацию. Вроде как и создаем объект, но переменной для него не имеем, и к его методу обращаемся напрямую а не через ссылочную переменную. Или я где-то что-то снова не догнал???
0
|
||
|
1 / 1 / 0
Регистрация: 14.05.2013
Сообщений: 6
|
||||||
| 31.08.2013, 13:51 | ||||||
|
Когда создается объекта какого-нибудь класса этот объект имеет собственные копии переменных, методов, свойств и т.д., определенных в данном классе. Это не распространяется на статические переменные методы и т.д.
1
|
||||||
|
2 / 2 / 0
Регистрация: 22.08.2013
Сообщений: 38
|
|
| 31.08.2013, 13:57 [ТС] | |
|
0
|
|
|
Модератор
2939 / 1802 / 180
Регистрация: 19.02.2011
Сообщений: 6,559
|
||
| 31.08.2013, 14:05 | ||
|
1
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||
| 01.09.2013, 22:03 | |||
|
Добавлено через 3 минуты
1
|
|||
|
36 / 15 / 2
Регистрация: 02.09.2013
Сообщений: 565
|
|
| 03.09.2013, 16:02 | |
|
Здрасте! Сам недавно стал писать проги (на C#) и ооп использую. Создаю свои классы. Применяю.
Но, думаю еще я зелен и использую ООП неглубоко. Тем не менее попытаюсь от себя что то вам пояснить. 1. Вы пишете :" (как я понимаю, это те же функции и процедуры)" Я думаю это ошибка.Вы не полно поняли понятие класса. Класс это каркас для объекта. А объект (и его класс конечно же) это не только функции и процедуры. Это еще и данные с которыми он работает. Т.е. объект (который будет создан по образу и подобию класса) это : данные (поля) и методы (процедуры и функции) которые работают этими с полями 2.Вот допустим я написал короткую команду в своей программе MessageBox.Show("привет"); И она вывела на экран окошко с надписью "привет" Создавал ли я объект от MessageBox класса ? - нет. Создавал ли в нем метод Show ? - нет. А оно работает. Простым языком класс MessageBox имеет статичный метод Show. Поэтому его можно использовать сразу, в программе не создавая от этого класса объекта. Т.е. мне не нужно было делать так: Создать MyMessageBoxObject1 от MessageBox и не нужно было писать MуMessageBoxObject1.Show("привет"); Оно сразу заработало. Если я ошибся ,то гуру прошу поправить. Но думаю, пусть это и грубо, но в целом направление ответа верное. Добавлено через 23 минуты Из общих принципов теории ооп Попробую вам описать простой класс (собственный) на условном языке. Создать класс MoyDom Создать в классе внутреннюю переменную:komnati Создать в этом классе свойство: KolVoKomnat Создать в классе инструкцию связи свойства KolKomnat с внутренней переменной komnati начало инструкции СНАРУЖИ МОЖНО ПРИСВОИТЬ свойству значения. И потом их засунуть в komnati СНАРУЖИ МОЖНО ПРОЧИТАТЬ значения свойства. И взять их при этом из komnati конец инструкции Создать метод в этом классе: UluchitMoyDom сам метод начало: komnati=komnati+5 cам метод конец. Хватит описывать класс MoyDom. Мы получили класс. Т.е. каркас. Создадим объект. Создать от класса MoyDom объект DomikN1 Теперь запишем в объект колличество желаемых комнат. DomikN1.KolVoKomnat=2 Теперь запустим метод улучшения дома DomikN1.UluchitMoyDom Теперь посмотрим сколько комнат стало в доме печатать содержимое DomikN1.KolVoKomnat на экране "7" Это так, для понимания класса и объекта. Теперь же создадим в классе второй метод, и скажем что он будет статичный. Static UluchitMoyDomSilno сам метод начало: получить в метод число прибавить 10 вернуть из метода обратно наружу результат прибавления cам метод конец. Тогда можно и не создавать объекта от класса. А сразу вызвать метод из класса так: n=MoyDom.UluchitMoyDomSilno(2) распечатать на экран значение n должно быть "12"
0
|
|
|
Антикодер
1889 / 871 / 48
Регистрация: 15.09.2012
Сообщений: 3,092
|
|
| 03.09.2013, 19:37 | |
|
названия на транслите и с приставками типа "My" "C" ужасны
0
|
|
|
2 / 2 / 0
Регистрация: 22.08.2013
Сообщений: 38
|
|
| 03.09.2013, 21:22 [ТС] | |
|
Молодой кодер, вы о чем? Мы о статических методах, какое они отношение имеют к ООП и если здесь спрашивалось про классы, то про их безымянную реализацию и вызов функций (методов) через них! Ребята уже вроде как все разжевали, читайте ветку!
(А как попросить модераторов почистить ветку и убрать из нее посты не касающиеся темы? А то вот так ищешь нужную информацию, а там на один пост по делу 20 бесполезных сообщений)
0
|
|
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||||||
| 03.09.2013, 21:33 | ||||||||
|
ShowMessageBox("привет"); И она вывела на экран окошко с надписью "привет" Создавал ли я объект от MessageBox класса? — нет. Создавал ли я класс MessageBox? — нет. Создавал ли в нем метод Show? — нет. А оно работает. Простым языком просто использовали функцию ShowMessageBox. Поэтому ее можно использовать сразу, в программе не создавая никакого класса и объекта от этого класса. Т.е. мне не нужно было делать так: Создать класс MessageBox. Создать MyMessageBoxObject1 от MessageBox и не нужно было писать MуMessageBoxObject1.Show("привет"); Оно сразу заработало.
0
|
||||||||
|
Модератор
2939 / 1802 / 180
Регистрация: 19.02.2011
Сообщений: 6,559
|
|
| 03.09.2013, 21:36 | |
|
0
|
|
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|
| 03.09.2013, 21:49 | |
|
0
|
|
|
36 / 15 / 2
Регистрация: 02.09.2013
Сообщений: 565
|
||||
| 03.09.2013, 22:08 | ||||
![]() var MyHouse : House; - ну явно не создание объекта. Чисто переменная, своего, ранее описанного типа. И просто процедуры и функции. Добавлено через 2 минуты TanaTiX, Добавлено через 2 минуты Важно вот: " Т.е. мне не нужно было делать так: Создать MyMessageBoxObject1 от MessageBox и не нужно было писать MуMessageBoxObject1.Show("привет"); Оно сразу заработало." Я пытался на пальцах объяснить, что есть класс, уже написанный (разрабами). И там есть статичный метод Show. И для использования статичного метода, не нужно было генерить объект от класса. Можно и свой класс написать, и там закодить статичный метод. В реале может и не так Но мы абстрагировались до тех самых "на пальцах".Добавлено через 3 минуты Ну и чуток по ООП для кучи.
0
|
||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||
| 03.09.2013, 22:11 | ||
|
0
|
||
|
36 / 15 / 2
Регистрация: 02.09.2013
Сообщений: 565
|
||
| 03.09.2013, 22:13 | ||
![]() А чего тут объяснять то дополнительно ? И так ясно что статические методы нужны там, где не нужно создание экземпляра класса. Т.е. такое бывает.
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||
| 03.09.2013, 22:21 | |||
|
Добавлено через 4 минуты
0
|
|||
| 03.09.2013, 22:21 | |
|
Реализация принципов ООП на примере Написать программу с использованием 3 принципов ООП Написать программу с использованием принципов ООП Применение принципов ООП на практике (мнение о приведенном коде) Оценить код с точки зрения принципов ООП и корректность в целом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|