Программирование


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
51 3 28

ООП ОП 30/10/19 Срд 16:03:26 15091621
15711698601200.jpg (7Кб, 249x203)
249x203
Привет, учу C#, и не могу понять что такое ООП, видимо я тупой, следовательно прошу излагать всё крайне просто, на википедии сложно
30/10/19 Срд 16:04:51 15091632
Нет.
Аноним 30/10/19 Срд 16:05:53 15091653
30/10/19 Срд 16:06:49 15091664
>>1509162 (OP)
Сука съеби со своим лиственником.
30/10/19 Срд 16:08:44 15091675
>>1509165
Уроки иди делай, программирование не для тебя и не для таких как ты.
Аноним 30/10/19 Срд 16:09:40 15091686
>>1509167
Сын говна, а для кого же??
Аноним 30/10/19 Срд 16:15:06 15091727
>>1509168
Для тех, кто не лезет со своими хуевопросами на двачи, не пройдя дальше первой ссылки в гугле. По видосикам, небось, вкатываешься, чмоня?
Аноним 30/10/19 Срд 16:20:00 15091738
>>1509172
Нет, но по началу пытался по видео, позже когда понял что ничего не понял, начал читать Гирберта Шилдта, по-моему так
Аноним 31/10/19 Чтв 19:35:12 15100589
Аноним 31/10/19 Чтв 19:57:57 151012810
>>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: “Сычёв)


И вот короче вся эта хуйня в общем смысле и называется ООП.
01/11/19 Птн 01:25:26 151037711
>>1510128
Что из того, что ты высрал, ООП?
Аноним 01/11/19 Птн 09:26:03 151043712
>>1510377
Всё.

Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
01/11/19 Птн 09:36:58 151043913
>>1510128
Херня какая-то. Надо через конструхтор заполнять студентов, либо через метод. Ну и в БД их схоронять.
01/11/19 Птн 09:38:48 151044014
>>1510128
у тебя еще и поля не привате
Аноним 01/11/19 Птн 17:58:33 151079715
>>1509162 (OP)
>C#
>не могу понять что такое ООП
Потому что ты школьник
01/11/19 Птн 18:00:43 151080116
Аноним 02/11/19 Суб 00:17:59 151110217
>>1509162 (OP)
Мне кажется если человек из учебника по ЯП не может понять, что такое ООП, то, наверное, программирование это в принципе не его и лучше не продолжать.
Аноним 02/11/19 Суб 02:11:54 151112618
>>1511102
тебе так кажется, потому что ты мудак
учебники по ЯП не объясняют концепции ООП. Это не их задача.
02/11/19 Суб 11:21:02 151122319
Аноним 02/11/19 Суб 13:55:22 151132720
>>1509162 (OP)
Смотри. ООП (так называемое классическое) это такая вот хуйня. Есть у тебя некоторое описание абстрактной хуйни, которая может что-то хранить и что-то делать, это называют класс. А объект - это непосредственно то, что может хранить и делать, описанное в абстрактной хуйне, это называют еще экземпляром класса.
Вот тебе пример на абстрактном языке:

Класс Тянка(Строка имя, Логическое хочет_трахаться) {
Строка имя;
Логическое хочет_трахаться;
Функция стонать() { вывести_на_экран(Имя, "стонет") }
Функция делать_минет() {
если себя.хочет_трахаться {
вывести_на_экран(Имя, "делает минет");
себя.стонать()
}
вернуть себя.хочет_трахаться }
Функция готовить_ужин() { вывести_на_экран(Имя, "готовит ужин") }
Функция ебать_мозг() { вывести_на_экран(Имя, "ебет мозг") }
}

Класс Кун(Строка Имя, Логическое хочет_трахаться) {
Строка Имя;
Логическое хочет_трахаться;
Функция стонать() { вывести_на_экран(Имя, "стонет") }
Функция дрочить() {
вывести_на_экран(Имя, "дрочит");
себя.стонать()}
Функция ебать_тянку(Тянка т) {
Логическое делает_минет = т.делать_минет();
если не делает_минет и себя.хочет_трахаться {
себя.дрочить()
} или если делает_минет() и себя.хочет_трахаться {
себя.стонать()
}
}

Мы описали пару классов, эта хуевины хранят имя и желание поебаться и могут что-то делать, но на самом деле не могут, так как они несколько абстрактные, чтобы они смогли, надо сделать экземпляры этих хуевин:

снежана = новый Тянка("Снежана", правда)
валерия = новый Тянка("Валерия", ложь)
ероха = новый Кун("Ероха", правда)

Теперь попробуем заставить эти экземпляры повзаимодействовать.

ероха.ебать_тянку(снежана) --> вывод программы: Снежана делает минет Снежана стонет Ероха Стонет
ероха.ебать_тянку(валерия) --> вывод программы: Ероха дрочит Ероха Стонет

Теперь смотри, у этих классов есть нечто общее, что хотелось бы учесть и не дублировать код. Для этого придумали такое понятие как наследование. Сразу к примеру, отрефакторим наш код:

Класс ПохотливыйЧеловек(Строка Имя, Логическое хочет_трахаться) {
Строка Имя;
Логическое хочет_трахаться;
Функция стонать() { вывести_на_экран(Имя, "стонет") }
}

Класс Тянка(Строка Имя, Логическое хочет_трахаться) наследует ПохотливыйЧеловек {
Функция делать_минет() {
если себя.хочет_трахаться {
вывести_на_экран(Имя, "делает минет");
себя.стонать()
}
вернуть себя.хочет_трахаться }
Функция готовить_ужин() { вывести_на_экран(Имя, "готовит ужин") }
Функция ебать_мозг() { вывести_на_экран(Имя, "ебет мозг") }
}

Класс Кун(Строка Имя, Логическое хочет_трахаться) наследует ПохотливыйЧеловек {
Функция дрочить() {
вывести_на_экран(Имя, "дрочит");
себя.стонать()}
Функция ебать_тянку(Тянка т) {
Логическое делает_минет = т.делать_минет();
если не делает_минет и себя.хочет_трахаться {
себя.дрочить()
} или если делает_минет() и себя.хочет_трахаться {
себя.стонать()
}
}

Тут могут быть ошибки, пример иллюстративный. Как видишь, мы добавили еще один класс, который забрал себе часть кода и такой класс называется базовым классом для остальных двух, а остальные два - наследники, которые могут пользоваться функциональностью базового.

Это основа классического ООП.

Задавай свои ответы.
Аноним 02/11/19 Суб 14:00:56 151132821
>>1511327
А терерь...
Класс Котомальчик: Кун, Тянка {
}
02/11/19 Суб 14:08:01 151132922
>>1511327
Какое же гавно тут сидит
02/11/19 Суб 14:20:41 151133823
>>1511329
Обоснуй.
Своё видение ооп давай
02/11/19 Суб 15:00:01 151136624
>>1511338
Да это просто моралофажина ебаная.
02/11/19 Суб 15:07:20 151136825
>>1511327
>ероха.ебать_тянку(снежана)
Это инкапсуляция, кстати.
02/11/19 Суб 15:13:30 151137226
>>1511368
Инкапсуляция - это создание класса.
Аноним 02/11/19 Суб 16:13:34 151138927
>>1511327
А 3some как? А если два ерохи ебут снежану?
02/11/19 Суб 16:17:28 151139328
>>1511389
Создаешь два потока, и 2 разных объекта ерох ебут один и тот же объект снежану одновременно.
Аноним 02/11/19 Суб 17:45:43 151145029
>>1511389
Если ничего не менять, то можно запилить класс Оргия, в котором описать все связи между экземплярами, например.
03/11/19 Вск 08:53:25 151179930
Какие же тут долбаебы сидят
Аноним 03/11/19 Вск 11:34:57 151184831
Аноним 05/12/19 Чтв 22:47:18 153870232
привстал от треда
Аноним 06/12/19 Птн 14:12:24 153916733
Аноним 06/12/19 Птн 17:14:29 153937634
>>1509162 (OP)
> понять что такое ООП, видимо я тупой


Как можно понять кучу говноа
Аноним 06/12/19 Птн 23:15:28 153973935
>>1509162 (OP)
Чтобы понять, зачем нужно ООП, нужно знать недостатки процедурного программирования в стиле C.
Аноним 06/12/19 Птн 23:25:07 153974836
>>1509162 (OP)
ООП - это способ вызывать полиморфные функции без объявления их в сурс-код зависимости.
Аноним 06/12/19 Птн 23:38:13 153975437
>>1539748
Нет - это манкипатчинг называется
Аноним 07/12/19 Суб 00:00:00 153976338
image.png (89Кб, 200x200)
200x200
Аноним 07/12/19 Суб 00:25:47 153977739
>>1539763
Полиморфизм:

import Пизда

func Хер(Пизда пизда) {
пизда.Ебать();
}

Манкипатчинг:

$("Трап").Ебать()

Аноним 07/12/19 Суб 00:28:59 153977940
>>1539777
Покажи пальцем, где в первом случае у тебя сурс-код зависимость на функцию пизда.Ебать().
07/12/19 Суб 00:30:54 153978041
15720782705170.jpg (7Кб, 107x112)
107x112
>>1539777
Зачем ты тут протекаешь
Аноним 07/12/19 Суб 00:30:59 153978142
>>1539779
>import Пизда
Что у тебя со зрением
07/12/19 Суб 01:01:37 153979743
>>1539777
Только к полиморфизму это не имеет никакого отношения
Аноним 07/12/19 Суб 01:09:44 153980544
>>1539797
class Тян implements Пизда {
Ебать() {}
}

class РезиноваяЖенщина implements Пизда {
Ебать() {}
}

Пизда пизда1 = Тян()
Пизда пизда2 = РезиноваяЖенщина ()

Хер(пизда1)
Хер(пизда2)

Трап трап = Трап ()
Хер(трап )
Error class Трап does not implement interface Пизда
Аноним 07/12/19 Суб 02:12:01 153982445
>>1539805
class ТрапАдаптер implements Пизда {
ТрапАдаптер(Трап трап) {}
Ебать() {}
}

Хер(new ТрапАдаптер(трап));
Аноним 07/12/19 Суб 02:45:36 153983346
Тупорылые уебки, возвращайтесь свои круды писать, кретины. ООП оказывается это про классы, наследование у них. Дауны, вы хоть погуглить историю ООП, а не из очередной Джава-Шарп школы нам тут хуйню рассказывайте. Единственный современный язык с ООП на продакшене - это Эрланг. И очевидно, ООП это очень нишевая парадигма, которая заточена под многопоточные задачи. Но у них если есть public class то сразу рефлекс у животных ЭТА ЖИ ООП, ТАМ ЖЕ КЛАСС, НАС ТАК УЧИЛИ.
Аноним 07/12/19 Суб 03:03:19 153983647
>>1539833
Да всем похуй, что там изначально понималось под ООП. Сейчас это инкапсуляция, полиморфизм, наследование. Твердо и четко!
Аноним 07/12/19 Суб 03:08:14 153983748
>>1539833
Ебать прочитал статью по ООП на википедии и теперь решил высрать свое охуительно важное мнение?
Аноним 07/12/19 Суб 03:24:05 153983849
>>1509162 (OP)
ООП это когда ты вместо того чтобы копировать свой код из класса в класс, выбираешь всё общее из этих классов и создаешь абстрактный класс, который потом будет наследоваться производными. Тем самым тебе не придётся менять сотни строк кода, если ты хочешь изменить какое-то общее значение.

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

ООП это когда тебе нужно, но ты не можешь придумать разные имена своим переменным, методам, полям, перечислениям и т. д, поэтому ты оборачиваешь их в классы и пространства имён, тем самым компенсируя недостаток фантазии.

(Вот тебе 3 принципа ООП - наследование, полиморфизм, инкапсуляция)

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

Абстрактный класс это базовый класс, который реализует в себе всё общее для производных классов, именно поэтому экземпляр абстрактного класса не нужно (и нельзя) инициализировать. Виртуальные методы это те методы, которые могут быть перезаписаны производными классами. Нахуй они нужны? Почему бы неявно не сделать все методы виртуальными? Потому что могут быть такие методы, изменение которых в производных классах, могут поломать работоспособность всего класса. И когда ты смотришь на базовый класс и видишь не виртуальный метод, то понимаешь, что это важный метод, работу которого нельзя менять в производных классах.

Вот вроде бы и всё. Не понятно может быть только первый раз, после 2-3 книги ты осознаешь что к чему и понимаешь насколько это полезно и охуенно.
Й 07/12/19 Суб 03:50:30 153984250
Й
Аноним 07/12/19 Суб 04:07:58 153984451
Аноним 07/12/19 Суб 08:54:01 153987952
>>1539781
А почему же ты тогда вызываешь пизда.Ебать(), а не Пизда.ебать(пизда)?
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов