LINUX.ORG.RU
ФорумTalks

Объясните нубу

 , ,


0

1

Что есть объектно-ориентировочное программирование? И чем оно отличается от обычного, т.е. не ООП. Столько раз слышал это, но так и не понял что это.



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от DELIRIUM

Блин, чувак, я не троллю. Я реально с этим не сталкивался, или может сталкивался но просто не знал этого.

ozzee
() автор топика
Ответ на: комментарий от ozzee

Наверняка поиск по форуму даст тебе ответ, если уж ты решил его именно на лоре получить.

arturpub ★★
()

Что такое «обычное» программирование?

Deleted
()

открой современную книжку по Яве.

это не то ООП, которое в книжке по ТурбоПаскалю7

Deleted
()
Ответ на: комментарий от iz_tabakerki

норм.
я тоже лет 18-19 узнал что есть такое ООП, когда книжку в универе сказали купить, по ТП7.

Deleted
()

Это когда определённые сущности (файлы, объекты реального мира, да что угодно) представляются в виде самодостаточных структур, работают с которыми только через определённый набор функций, а не напрямую.

Например, есть объект - ты. Тебе говорят «принеси воды» - ты идёшь на кухню, наливаешь воды в чашку и приносишь. Это ООП. А если тебя возьмут в охапку, дотащат до кухни, затем схватят тебя за руку и твоей рукой нальют воду, то это не-ООП. Фишка ООП ещё и в том, что если на твоём месте окажется инопланетянин с тентаклями, то в ответ на запрос «принеси воды» он точно также принесёт воды. А во втором варианте потребуется кардинально пересматривать алгоритм наливания воды, потому что тентакли это совсем не то, что руки.

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

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

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

Эээ... давай все-таки не трогать асм и 'любые' языки. На JS тоже по идее можно ооп код писать для ноды через прототипы. Но выглядит он отвратительно.

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost

На JS необычно делается только наследование. А всё остальное - ничуть не хуже/лучше, чем в других языках.

KivApple ★★★★★
()
Ответ на: комментарий от next_time

он просто вбрасывать не умеет, вот как надо: >Что делает ООП - ООП?

Угу. А еще он вбрасывает про ооп в толксах. Кому вообще нужно это сиране ооп в толксах?)

Stil ★★★★★
()

Для таких вопросов идеально IRC канал подходит.

i-rinat ★★★★★
()
Ответ на: комментарий от KivApple

Но согласись что это слегка костыль как оно делается. Просто ооп это хорошо когда оно нужно. А скажем в вебе оно нужно мягко говоря не всегда. Да и в асме оно не слишком нужно (да и не совсем ооп это будет через virtual если)

upcFrost ★★★★★
()

Некоторым людям помогает моя скандальная видео-лекция на эту тему. Скандальная потому что я тру ноги, сижу и смотрю в пол.

https://www.youtube.com/watch?v=EZgHECp4Dfo

fifajan
()

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

Но это обьяснение упрощенное. Там еще есть полиморфизм, инкапсуляция и наследование. А это уже надо читать и вникать.

spoilt ★★★
()
Последнее исправление: spoilt (всего исправлений: 1)
Ответ на: комментарий от upcFrost

На JS тоже по идее можно ооп код писать для ноды через прототипы. Но выглядит он отвратительно.

Пиши не через прототипы

function upcFrost() {
   this.stars  = 5;
   this.usrpic = "1055144751.png";
}

var v1 = new upcFrost();
var v2 = new upcFrost();


Прототипы сделаны только для того что бы наследуемые свойства таких глобальных объектов как Array, Number, etc менять.

uin ★★★
()
Ответ на: комментарий от uin

function

ооп

чего только не придумают лишь бы быть в тренде. Ну ты же сам понимаешь что это выглядит слегка странно по меньшей мере?

upcFrost ★★★★★
()

Три кита ООП это полиморфизм, наследование и инкапсуляция. Инкапсуляция сегодня считается практически обязательным атрибутом любого стиля программирования и относить её конкретно к объектному программированию возможно не совсем разумно, но всё же принято. Полиморфизм и наследование же это суть ООП — когда с помощью наследования выстраивается иерархия классов и с помощью полиморфизма наследники могут (пере)определять поведение родителей. Это очень мощный инструмент для абстракций и применим почти в любой области, хотя и не всегда «в лоб».

Legioner ★★★★★
()

Коротко: суть заключаетсяив том, чтобы создавать программные конструкции эмитирующие объекты и связи в реальном мире, с целью упрощения понимания и разработки ПО.

invy ★★★★★
()
Ответ на: комментарий от KivApple

А если тебя возьмут в охапку, дотащат до кухни, затем схватят тебя за руку и твоей рукой нальют воду, то это не-ООП.

Это почему же не ООП? Вполне себе... Особенно если какой-то visitor это сделает.

invy ★★★★★
()
Ответ на: комментарий от upcFrost

Тебя слово function смущает, а class - нет?

invy ★★★★★
()

объектно-ориентировочное

FACEPALM

resurtm ★★★
()
Ответ на: комментарий от upcFrost

Специально для тебя же ввели.

class upcFrost {
   constructor () {
      this.stars  = 5;
      this.usrpic = "1055144751.png";
   }

   some_method () {}

   static method () {}
}

var v1 = new upcFrost();
var v2 = new upcFrost();
int64
()

чем оно отличается от обычного

оно необычно, очевидно же

язаснос

f1u77y ★★★★
()
Ответ на: комментарий от ozzee

Другой, подразумевает замену текущему, ты как-то определил ЯП на каком я пишу? :)

znenyegvkby
()

Представь себе ящик. У ящика есть свойства. Некоторые свойства представляют собой числа — длина, ширина, высота. Другие свойства это текст — на ящике написано «не кантовать». А ещё у ящика есть свойство — это крышка. Крышка тоже некий объект, со своими свойствами.

Кроме свойств, ящик имеет «методы», то есть «процедуры». В них написано что делать с этим ящиком: как его хранить, как перевозить.

Ещё у ящика есть «события». Это тоже «процедуры», которые срабатывают при определённом внешнем воздействии. Например, «при открытии крышки ящика», «при его создании», «перед его уничтожением».

Вот это и есть объект. Вернее, его прототип или чертёж, так называемый «класс».

Вот теперь представь грузовик, в котором лежат куча одинаковых ящиков. Все они сделаны по одному чертежу (из одного и того же класса) , то есть представляют собой «экземпляры класса» или «объекты», но у каждого своя особенность — в свойстве «товар» написано, например КАРТОШКА, АПЕЛЬСИНЫ. Представь себе грузчика, который выгружает ящики. Грузчик должен разложить ящики по содержимому. Вот он смотрит «ага, вот тут картошка, его кладу влево», «а вот тут вижу апельсины, его кладу вправо».

Вот программа «Грузчик», внутри которой создаются объекты «ящики», и программа хочет их отсортировать. Программа думает «я знаю, что эти вот ящики созданы из класса ЯЩИК, и поэтому знаю что где-то тут сбоку есть надпись, означающая содержимое. Вот туда я посмотрю и решу куда его положить».

Вот то, что куча ящиков имеет похожие свойства и методы, потому что создана на базе одного класса ЯЩИК — называется ПОЛИМОРФИЗМ. Я захотел сделать эти ящики не из досок, а из фанеры. Для этого я редактирую класс ЯЩИК и впредь у всех создаваемых экземпляров в свойстве МАТЕРИАЛ будет не «доска», а «фанера». И меня не волнует количество ящиков, захочу — сделаю ещё пару сотен. И мне не нужно будет для каждого ящика писать код «сделать переменную, которая означает цвет ящика 1, потом ящика 2 и так до полусмерти писать код». Вместо этого я напишу код «ящик1=СОЗДАТЬ ОБЪЕКТ из КЛАССА ЯЩИК» и все необходимые свойства уже готовы.

Дальше программа «грузчик» должна отличать надпись «Содержимое ящика 1» от надписи «Содержимое ящика 2». Вместо создания кучи переменных с разными названиями, программа может обращаться к объектам-ящикам: ящик1.Содержимое, ящик2.Содержимое и так далее. Вот то, что «Содержимое» относится к конкретному объекту — называется ИНКАПСУЛЯЦИЯ. То есть я спокойно буду писать «мне нужно свойство СОДЕРЖИМОЕ у ящика1».

А вот теперь представь, что я создал на базе чертежа ЯЩИК ещё один более сложный чертёж ЯЩИК С РУЧКАМИ. В дочернем чертеже я приделал к ящику две ручки для переноски. А потом ещё один чертёж ЯЩИК С ДЫРКАМИ, где вместо ручек просто прорезал по бокам дырки для держания. Через год мне понадобилось заменить все гвозди в ящиках на шурупы для надёжности. Для этого я редактирую чертёж ЯЩИК, где в свойстве КРЕПЛЕНИЕ меняю «гвозди» на «шурупы». Дочерние классы «ЯЩИК С РУЧКАМИ» и «ЯЩИК С ДЫРКАМИ» унаследуют это усовершенствование. Прикинь, сколько кода и программ мне бы пришлось переписывать, не будь у меня такого объектного программирования! А тут я в одном месте поменял что-то и это унаследовалось в дочерние классы и применилось во всех программах (а не только в Грузчике). Вот это называется НАСЛЕДОВАНИЕ.

ООП — это программирование с использованием принципов ИНКАПСУЛЯЦИИ, НАСЛЕДОВАНИЯ и ПОЛИМОРФИЗМА.

Deathstalker ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.