Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/84: Рейтинг темы: голосов - 84, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 02.10.2019
Сообщений: 20

Объясните понятие ООП

13.02.2020, 23:25. Показов 21423. Ответов 242

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

Понятие ООП
Доброго времени суток! Пытаюсь вникнуть в ООП после длительного написания кода в процедурном стиле, и это не так просто =( Хочу...

Объясните понятие изоморфизма двух алгебр (на примере)
Кто нибудь, объясните мне понятие изоморфизма двух алгебр на примере. Или дайте источник информации (я искал -- толкового ничего не нашёл)....

Дать понятие понятие НОК в кольце целых чисел
Дать понятие понятие НОК в кольце целых чисел.

242
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.10.2020, 22:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Так определитесь уже, отличим или нет
В смысле? Я разве писал, что не отличим? Не писал.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
15.10.2020, 23:31
Ну тогда поговорите с Шамилем, он это сказал. Может он вас переубедит.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.10.2020, 23:35
Mikhaylo, и он этого не говорил.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
16.10.2020, 08:02
Шамиль назвал модуль статическим классом. Статический класс - это по факту самый обычный объект без наследования. Так ведь?
Наследование для объектов - это необязательная допфича. А так модуль обладает всеми основными свойствами объекта. Ибо это основное свойство - абстракция (присвоение общего имени функциям, переменным и другим объектам и возможность оперирования с этим именем).
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
16.10.2020, 10:13
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Так определитесь уже, отличим или нет
Статический класс практически не отличим от модуля. Но, разумеется, класс отличим от объекта.

Кроме того, использование объектов не является чем-то специфичным для ООП. В большинстве языков можно объявлять пользовательские типы данных и/или использовать замыкания.
1
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
16.10.2020, 10:53
Цитата Сообщение от KrisMuS Посмотреть сообщение
Скажите пожалуйста понятным языком, что такое объектно-ориентированное программирование ?
Это такое проектирование, в котором предметная область разбивается на объекты. Объекты включают в себя как состояние (поля, свойства), так и методы - функции, которые меняют состояние объекта.
Таким образом, ООП это способ организации кода, при котором предметная область рассматривается как набор объектов, которые в свою очередь состоят из данных и функций.

На мой взгляд, наиболее точное определение дает англоязычная википедия:
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods).

При этом русскоязычная вики дает какое-то невнятное определение, и зачем-то привязывает туда наследование.
Украиноязычная вики тоже совсем не раскрывает сути, снова же скатываясь к частностям. Обе эти статьи совсем не раскрывают понятие ООП.

Помимо способа организации кода, ООП дает способ представления предметной области - как набора объектов. Другие парадигмы такого способа не предоставляют. Процедурное программирование рассматривает программу как поток данных и процедур обрабатывающих эти данные. А функциональное программирование строит программу в виде сложной функции, которая имеет входные и выходные данные.
Оба этих подхода концентрируются в первую очередь на действиях над данными, но не фокусируются на самих данных. ООП же позволяют построить модель предметной области, в которой объекты отображают состояние, а их методы - действия над объектом.

Замечу также, что ООП это в первую очередь то, как представляет себе программу программист. Синтаксис здесь играет вторичную роль.
С точки зрения синтаксиса, то и на структурных языках (Си) можно писать программу в ООП стиле. И на объектных языках (C#) можно писать в процедурном стиле.

Добавлено через 2 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если мы хотим, чтобы некий код выполнялся для разных типов, мы должны связать их наследованием. В этом и заключается ООП.
Нет. ООП это в первую очередь способ создания модели мира. Наследование, полиморфизм и т.д. - это просто детали реализации, которые не влияют на саму парадигму, и не определяют ее.
1
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
16.10.2020, 11:34
Цитата Сообщение от Storm23 Посмотреть сообщение
Это такое проектирование, в котором предметная область разбивается на объекты. Объекты включают в себя как состояние (поля, свойства), так и методы - функции, которые меняют состояние объекта.
Это не определение, а неформальное объяснение "на пальцах".

Вопросы:
1. Что такое объект? (Является ли натуральное число объектом?)
2. Что такое свойства? (Геттеры/сеттеры - это свойства или методы?)
3. Что такое методы? (Поле типа функция является свойтсвом или методом? Является ли методом функция, которая не меняет состояние объекта?)
4. Что значит "включают в себя"? (Обязательно и то, и другое?)

Цитата Сообщение от Storm23 Посмотреть сообщение
ООП это в первую очередь способ создания модели мира.
Если я в изобрету Фортран++, который отличается только тем, что вместо ключевого слова "модуль" будет использоваться ключевое слово "класс", это будет ООП?
Code
1
2
3
4
class name     
   [statement declarations]  
   [contains [subroutine and function definitions] ] 
end class [name]
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
16.10.2020, 11:38
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Статический класс - это по факту самый обычный объект без наследования. Так ведь?
Я не знаю, что ты подразумеваешь под статическим классом

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Shamil1 Посмотреть сообщение
это будет ООП?

Code
1
2
3
4
class name     
   [statement declarations]  
   [contains [subroutine and function definitions] ] 
end module [name]
это будет синтаксической ошибкой
Code
1
2
...
end class [name]
же




Добавлено через 1 минуту
Цитата Сообщение от Storm23 Посмотреть сообщение
Наследование, полиморфизм и т.д. - это просто детали реализации, которые не влияют на саму парадигму, и не определяют ее.
А что влияет и определяет?
0
16.10.2020, 11:48

Не по теме:

Цитата Сообщение от korvin_ Посмотреть сообщение
это будет синтаксической ошибкой
Заметил и исправил ещё за 2 минуты до Вашего поста :)

0
16.10.2020, 11:53

Не по теме:

Цитата Сообщение от Shamil1 Посмотреть сообщение
Заметил и исправил ещё за 2 минуты до Вашего поста :)
Ох уж этот concurrent мир =)

0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
16.10.2020, 11:53
Примеры по вопросам из моего предыдущего поста:
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
public class NaturalNumber
{
    const int DefaultSize = 4;
    
    private uint[] Digits;
    private int Count;
 
    public NaturalNumber() : this(0) {}
    
    public NaturalNumber(uint n)
    {
        Digits = new uint[DefaultSize];
        Digits[0] = n;
        Count = 1;
    }
    
    public NaturalNumber Add(NaturalNumber number)
    {
        var result = new NaturalNumber();
        // код сложения
        return result;
    }
}
 
public class A
{
    // ....
    
    public int MyField 
    {
        get 
        {
            IncreaseCounter();
            return GetValue();
        }
        set
        {
            Validate();
            NotifySubscribers();
            SetValue();
        }
    }
    
    // ....
}
 
public class B
{
    public Func<int, int, int> Add { get; set;}
}
 
public class C
{
    public int MyMethod(int x) => x + 2;
}
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
16.10.2020, 11:57
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Статический класс - это по факту самый обычный объект без наследования. Так ведь?
Есть такая фишка в C#:
Класс считается статическим, если при его создании, перед ключевым словом class указывается ключевое слово static. Определение класса статическим, означает то, что этот класс является набором только статических сущностей (полей, методов, свойств и т.п.), и, внимание, создавать объекты такого класс нельзя!
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
16.10.2020, 14:27
1. Экземпляр класса может не быть объектом. Объект может не быть экземпляром класса.

Большинство "OOP only" программистов воспринимают объект не как концепцию, а как синтаксис. "Объект - это экземпляр класса". Но натуральное число не является объектом. То же самое можно сказать про комплексное число, про координаты на плоскости и т.п. С точкой на плоскости немного сложнее. В зависимости от решаемой задачи мы можем рассматривать точку как значение (координаты в двумерном пространстве) или как объект (в тех случаях, когда разные точки могут иметь одинаковые координаты).

Класс (с полями и методами) не обязательно описывает объекты. Просто в некоторых языках это самый удобный или даже единственный способ объявления пользовательского типа данных.

Пользовательские типы данных (ПТД) в языках программирования появились очень давно - 60 лет тому назад. Типы данных Record (запись) можно объявить почти во всех языках программирования (здесь и далее я имею ввиду практические, а не эзетерические языки). Например, в Си для этого используется ключевое слово struct. Экземпляр ПТД является объектом или значением (как и экземпляр класса). То есть, программирование с использованием объектов - не обязательно ООП,


2. Класс без наследования концептуально не отличается от Модуля.

Класс, содержащий только определение ПТД типа Запись и статические фукнции для работы с ним, по сути является модулем. Например, статический класс в C# - это способ определения Модуля.

Если не используется наследование, то все методы класса можно сделать статическим. Разница между "John".SayHello() и SayHello("John") - это всего лишь синтаксический сахар. Причём, никто не мешает реализовать этот сахар на уровне компилятора. Например, в C# есть "методы расширения", позволяющие использовать для статических методов оба варианта синтаксиса.

Если все методы класса сделать статическими, то останутся только поля. То есть, получим определение ПТД типа Запись и статические фукнции для работы с ним. Создавать модули можно объявить почти во всех языках программирования.
1
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
16.10.2020, 18:24
Господа, прислушайтесь к словам препода на видео на Ютубе по ссылке:

Цитата Сообщение от neya Посмотреть сообщение
Вот здесь мне нравится, как человек объектном программировании говорит, с третьей минуты. Это для больших и сверхбольших систем, и если задача до двух тысяч строк кода, то можно обходиться и без
https://www.youtube.com/watch?... =UN%D0%98X
Заметили, когда он сбивается и нервничает, когда ему приходится разделять понятия "ООП, поддерживаемое синтаксисом языка" и "объектное проектирование"? Так вот, он из-за вас так психует, ибо вы склонны путать ориентацию языка на объекты и объектное проектирование.

Итак, всё идёт от объектного проектирования, когда данные и код определенным образом группируются и им даётся обобщенное имя, и далее идёт работа с этим именем. При этом вообще без разницы называется это в языке объектом, модулем или статическим классом, натуральным числом, в конце концов.
Если под общим именем несколько функций и инструкций, то это функция.
Если под общим именем несколько переменных, то это структура.
Переменные, функции, структуры - это частный случай объектов, вырожденным объекты.

Никаких определений не требуется, все четко и по полочкам разложено! И вы это все знаете!

Добавлено через 5 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Большинство "OOP only" программистов воспринимают объект не как концепцию, а как синтаксис. "Объект - это экземпляр класса". Но натуральное число не является объектом. То же самое можно сказать про комплексное число, про координаты на плоскости и т.п. С точкой на плоскости немного сложнее.
Концептуально натуральные числа - объекты, так как для них определены математические операции, операции сравнения...
А синтаксически - от языка зависит.

А о чем спор-то?

Добавлено через 3 минуты
Что касается статического класса, который необъект, то тут я бы поспорил. Вам так важно, где находятся поля и методы - в классе или объекте? Без разницы, наследование не является отправной точкой ООП.

Добавлено через 2 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
А что влияет и определяет?
Определяет абстракция. И только абстракция. Это именование методов и полей одним общим именем - именем объекта.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
16.10.2020, 21:54
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Заметили, когда он сбивается и нервничает, когда ему приходится разделять понятия "ООП, поддерживаемое синтаксисом языка" и "объектное проектирование"? Так вот, он из-за вас так психует, ибо вы склонны путать ориентацию языка на объекты и объектное проектирование.
Просто он так же не разбирается в предмете, как и ты.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Итак, всё идёт от объектного проектирования, когда данные и код определенным образом группируются и им даётся обобщенное имя, и далее идёт работа с этим именем. При этом вообще без разницы называется это в языке объектом, модулем или статическим классом, натуральным числом, в конце концов.
лютая дичь.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Что касается статического класса, который необъект, то тут я бы поспорил.
Ты не способен спорить, т.к. не владеешь предметом. Поэтому вместо спора, как попугай повторяешь один и тот же бред.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Определяет абстракция. И только абстракция. Это именование методов и полей одним общим именем - именем объекта.
Нет.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
17.10.2020, 07:36
korvin_, следите за своим языком. Ваше общение на этом форуме по существу тупой троллинг. Я почитал ваше писалово в этой теме, все сводится к фразам "Нет!", "Бред!" и "Сходи к врачу!".
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.10.2020, 09:06
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Я почитал ваше писалово в этой теме, все сводится к фразам "Нет!", "Бред!" и "Сходи к врачу!"
Ну вот, у тебя ещё и с чтением проблемы.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
17.10.2020, 09:10
Он по-прежнему в своем стиле! Давай, сделай еще выпад! Скажи, какой я неопытный и что надо к окулисту или к энцефалопату.

Вот пруф:
Цитата Сообщение от korvin_ Посмотреть сообщение
К врачу сходи всё же.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.10.2020, 09:21
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Скажи, какой я неопытный и что надо к окулисту или к энцефалопату.
Ну так это факты.

Вот пруф: Объясните понятие ООП — ты хоть что-нибудь прочитал из этого?

А свой диагноз и какой специалист тебе нужен, выясняй сам.
0
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,814
17.10.2020, 09:28
Цитата Сообщение от korvin_ Посмотреть сообщение
ты хоть что-нибудь прочитал из этого?
По отношению к собеседникам это является издевательством. Будь добр, вырази свою мысль лаконично без ссылок на англоязычные тома книг. Скажу тебе: такое общение является нарушением этикета. У тебя просто потребность показать себя умным: написал три слова и счастлив безмерно. Скажу еще я тебе: никто твои книги по ссылкам читать не будет, и ты это прекрасно знал, у тебя просто была цель сказать очередное: "Я не согласен, все сказанное вами бред!".

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

Объясните кое что по ООП
Не дает мне покоя очень важный момент, пример: System.IO.File.Open() System.IO - пространство имен File - класс Open() -...

ООП в паскале. Объясните что к чему
Проблема в следующем, хотелось бы понять как подключать дополнительные файлы исходных текстов к основному. не через uses же это делается...

Объясните некоторые принципы ООП в конкретной реализации
Доброго дня! У меня есть пользователи, которые делятся на зарегистрированных (User) и незарегистрированных (Person) и создаются...

Наследование ООП, объясните примитивную ситуацию, пож
Добрый. Всё никак не могу взять в толк: как это должно работать (точнее - почему не работает так, как я ожидаю). Примитивная наколенка: ...

Начинаю изучать ООП. Объясните, что такое интерфейс?
Всем привет. Начинаю изучать ООП. Объясните,что такое интерфейс?для чего он нужен и чем он отличается от класса?


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

Или воспользуйтесь поиском по форуму:
160
Ответ Создать тему
Новые блоги и статьи
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru