Привет, учу C#, и не могу понять что такое ООП, видимо я тупой, следовательно прошу излагать всё крайне просто, на википедии сложно
>>1509168Для тех, кто не лезет со своими хуевопросами на двачи, не пройдя дальше первой ссылки в гугле. По видосикам, небось, вкатываешься, чмоня?
>>1509172Нет, но по началу пытался по видео, позже когда понял что ничего не понял, начал читать Гирберта Шилдта, по-моему так
>>1509162 (OP)Короче, объясняю вкратце на примере. Допустим, тебе нужно сделать систему учёта успеваемости студентов. Для этого ты создаёшь класс Student, у которого описываешь свойства типа имя, фамилия, факультет, курс, группа и т.д. Грубо говоря ты создаёшь модель, с которой будешь дальше работать. Что такое группа? Это массив студентов. Значит пишешь так: var group = [student]. Теперь тебе нужно заполнить данные для первого студента. Ты делаешь так:group[0].name = Антонgroup[0].lastname = Двачевgroup[0].faculty = ИнжфакИ так далее. Второго студента уже будешь заполнять так: group[1].name = Славикgroup[1].lastname = Сычевgroup[1].faculty = ИсторическийЕщё ты, например, захочешь сделать метод который будет отправлять студенту смс с уведомлением о задолженности по предмету. Тогда в классе students можешь объявить метод sendSms(lastName: String){}А потом вызвать этот метод в другом классе типа student.sendSms(lastName: “Сычёв)И вот короче вся эта хуйня в общем смысле и называется ООП.
>>1510377Всё. Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
>>1510128Херня какая-то. Надо через конструхтор заполнять студентов, либо через метод. Ну и в БД их схоронять.
>>1509162 (OP)Мне кажется если человек из учебника по ЯП не может понять, что такое ООП, то, наверное, программирование это в принципе не его и лучше не продолжать.
>>1511102тебе так кажется, потому что ты мудакучебники по ЯП не объясняют концепции ООП. Это не их задача.
>>1509162 (OP)Смотри. ООП (так называемое классическое) это такая вот хуйня. Есть у тебя некоторое описание абстрактной хуйни, которая может что-то хранить и что-то делать, это называют класс. А объект - это непосредственно то, что может хранить и делать, описанное в абстрактной хуйне, это называют еще экземпляром класса.Вот тебе пример на абстрактном языке:Класс Тянка(Строка имя, Логическое хочет_трахаться) { Строка имя; Логическое хочет_трахаться; Функция стонать() { вывести_на_экран(Имя, "стонет") } Функция делать_минет() { если себя.хочет_трахаться { вывести_на_экран(Имя, "делает минет"); себя.стонать() } вернуть себя.хочет_трахаться } Функция готовить_ужин() { вывести_на_экран(Имя, "готовит ужин") } Функция ебать_мозг() { вывести_на_экран(Имя, "ебет мозг") }}Класс Кун(Строка Имя, Логическое хочет_трахаться) { Строка Имя; Логическое хочет_трахаться; Функция стонать() { вывести_на_экран(Имя, "стонет") } Функция дрочить() { вывести_на_экран(Имя, "дрочит"); себя.стонать()} Функция ебать_тянку(Тянка т) { Логическое делает_минет = т.делать_минет(); если не делает_минет и себя.хочет_трахаться { себя.дрочить() } или если делает_минет() и себя.хочет_трахаться { себя.стонать() }}Мы описали пару классов, эта хуевины хранят имя и желание поебаться и могут что-то делать, но на самом деле не могут, так как они несколько абстрактные, чтобы они смогли, надо сделать экземпляры этих хуевин:снежана = новый Тянка("Снежана", правда)валерия = новый Тянка("Валерия", ложь)ероха = новый Кун("Ероха", правда)Теперь попробуем заставить эти экземпляры повзаимодействовать.ероха.ебать_тянку(снежана) --> вывод программы: Снежана делает минет Снежана стонет Ероха Стонетероха.ебать_тянку(валерия) --> вывод программы: Ероха дрочит Ероха СтонетТеперь смотри, у этих классов есть нечто общее, что хотелось бы учесть и не дублировать код. Для этого придумали такое понятие как наследование. Сразу к примеру, отрефакторим наш код:Класс ПохотливыйЧеловек(Строка Имя, Логическое хочет_трахаться) { Строка Имя; Логическое хочет_трахаться; Функция стонать() { вывести_на_экран(Имя, "стонет") }}Класс Тянка(Строка Имя, Логическое хочет_трахаться) наследует ПохотливыйЧеловек { Функция делать_минет() { если себя.хочет_трахаться { вывести_на_экран(Имя, "делает минет"); себя.стонать() } вернуть себя.хочет_трахаться } Функция готовить_ужин() { вывести_на_экран(Имя, "готовит ужин") } Функция ебать_мозг() { вывести_на_экран(Имя, "ебет мозг") }}Класс Кун(Строка Имя, Логическое хочет_трахаться) наследует ПохотливыйЧеловек { Функция дрочить() { вывести_на_экран(Имя, "дрочит"); себя.стонать()} Функция ебать_тянку(Тянка т) { Логическое делает_минет = т.делать_минет(); если не делает_минет и себя.хочет_трахаться { себя.дрочить() } или если делает_минет() и себя.хочет_трахаться { себя.стонать() }}Тут могут быть ошибки, пример иллюстративный. Как видишь, мы добавили еще один класс, который забрал себе часть кода и такой класс называется базовым классом для остальных двух, а остальные два - наследники, которые могут пользоваться функциональностью базового.Это основа классического ООП.Задавай свои ответы.
>>1511389Создаешь два потока, и 2 разных объекта ерох ебут один и тот же объект снежану одновременно.
>>1511389Если ничего не менять, то можно запилить класс Оргия, в котором описать все связи между экземплярами, например.
>>1509162 (OP)Чтобы понять, зачем нужно ООП, нужно знать недостатки процедурного программирования в стиле C.
>>1509162 (OP)ООП - это способ вызывать полиморфные функции без объявления их в сурс-код зависимости.
>>1539763Полиморфизм:import Пиздаfunc Хер(Пизда пизда) { пизда.Ебать();}Манкипатчинг:$("Трап").Ебать()
>>1539797class Тян implements Пизда { Ебать() {}}class РезиноваяЖенщина implements Пизда { Ебать() {}}Пизда пизда1 = Тян()Пизда пизда2 = РезиноваяЖенщина ()Хер(пизда1)Хер(пизда2)Трап трап = Трап ()Хер(трап )Error class Трап does not implement interface Пизда
>>1539805class ТрапАдаптер implements Пизда {ТрапАдаптер(Трап трап) {}Ебать() {}}Хер(new ТрапАдаптер(трап));
Тупорылые уебки, возвращайтесь свои круды писать, кретины. ООП оказывается это про классы, наследование у них. Дауны, вы хоть погуглить историю ООП, а не из очередной Джава-Шарп школы нам тут хуйню рассказывайте. Единственный современный язык с ООП на продакшене - это Эрланг. И очевидно, ООП это очень нишевая парадигма, которая заточена под многопоточные задачи. Но у них если есть public class то сразу рефлекс у животных ЭТА ЖИ ООП, ТАМ ЖЕ КЛАСС, НАС ТАК УЧИЛИ.
>>1539833Да всем похуй, что там изначально понималось под ООП. Сейчас это инкапсуляция, полиморфизм, наследование. Твердо и четко!
>>1539833Ебать прочитал статью по ООП на википедии и теперь решил высрать свое охуительно важное мнение?
>>1509162 (OP)ООП это когда ты вместо того чтобы копировать свой код из класса в класс, выбираешь всё общее из этих классов и создаешь абстрактный класс, который потом будет наследоваться производными. Тем самым тебе не придётся менять сотни строк кода, если ты хочешь изменить какое-то общее значение. ООП это когда ты создаешь метод и в качестве аргумента передаешь ему какой-либо интерфейс, который будут реализовать классы передаваемые в данный метод. Это опять же избавляет тебя от редактирования многих строк, в случае если нужно внести какие-либо изменения, также тебе не нужно плодить несколько методов для каждого из классов. ООП это когда тебе нужно, но ты не можешь придумать разные имена своим переменным, методам, полям, перечислениям и т. д, поэтому ты оборачиваешь их в классы и пространства имён, тем самым компенсируя недостаток фантазии. (Вот тебе 3 принципа ООП - наследование, полиморфизм, инкапсуляция)Интерфейс используется там где нужно объединить несколько классов, которые находятся в разных иерархиях, но имеют что-то общее. Обычно новичкам сложно понять для чего нужны интерфейсы и они либо не используют их, либо используют их там где это не нужно. Абстрактный класс это базовый класс, который реализует в себе всё общее для производных классов, именно поэтому экземпляр абстрактного класса не нужно (и нельзя) инициализировать. Виртуальные методы это те методы, которые могут быть перезаписаны производными классами. Нахуй они нужны? Почему бы неявно не сделать все методы виртуальными? Потому что могут быть такие методы, изменение которых в производных классах, могут поломать работоспособность всего класса. И когда ты смотришь на базовый класс и видишь не виртуальный метод, то понимаешь, что это важный метод, работу которого нельзя менять в производных классах. Вот вроде бы и всё. Не понятно может быть только первый раз, после 2-3 книги ты осознаешь что к чему и понимаешь насколько это полезно и охуенно.