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

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

13.02.2020, 23:25. Показов 21888. Ответов 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
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,825
15.10.2020, 23:31
Ну тогда поговорите с Шамилем, он это сказал. Может он вас переубедит.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
15.10.2020, 23:35
Mikhaylo, и он этого не говорил.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,825
16.10.2020, 08:02
Шамиль назвал модуль статическим классом. Статический класс - это по факту самый обычный объект без наследования. Так ведь?
Наследование для объектов - это необязательная допфича. А так модуль обладает всеми основными свойствами объекта. Ибо это основное свойство - абстракция (присвоение общего имени функциям, переменным и другим объектам и возможность оперирования с этим именем).
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,908
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,908
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,908
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,908
16.10.2020, 11:57
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Статический класс - это по факту самый обычный объект без наследования. Так ведь?
Есть такая фишка в C#:
Класс считается статическим, если при его создании, перед ключевым словом class указывается ключевое слово static. Определение класса статическим, означает то, что этот класс является набором только статических сущностей (полей, методов, свойств и т.п.), и, внимание, создавать объекты такого класс нельзя!
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,908
16.10.2020, 14:27
1. Экземпляр класса может не быть объектом. Объект может не быть экземпляром класса.

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

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

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


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

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

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

Если все методы класса сделать статическими, то останутся только поля. То есть, получим определение ПТД типа Запись и статические фукнции для работы с ним. Создавать модули можно объявить почти во всех языках программирования.
1
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,825
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
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,825
17.10.2020, 07:36
korvin_, следите за своим языком. Ваше общение на этом форуме по существу тупой троллинг. Я почитал ваше писалово в этой теме, все сводится к фразам "Нет!", "Бред!" и "Сходи к врачу!".
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.10.2020, 09:06
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Я почитал ваше писалово в этой теме, все сводится к фразам "Нет!", "Бред!" и "Сходи к врачу!"
Ну вот, у тебя ещё и с чтением проблемы.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,825
17.10.2020, 09:10
Он по-прежнему в своем стиле! Давай, сделай еще выпад! Скажи, какой я неопытный и что надо к окулисту или к энцефалопату.

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

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

А свой диагноз и какой специалист тебе нужен, выясняй сам.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,825
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
Ответ Создать тему
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru