Степан Б.
2 повідомлення
#15 років тому
При ответи на вопрос нужен ли ООП? Необходимо еще основываться на поставленную задачу, вполне возможно что решение лучше будет сделанно через процедуры. Профессионал этим и отличается от быдлокодера, что может правильно(грамотно) решить задачу. Я как то видел одного приколиста который написал helo world в патернах )
Александр В.
771 повідомлення
#15 років тому
Да! вот только очень часто лень допроектировать с карандашиком всё ОТ и ДО
Евгений О.
2989 повідомлень
#15 років тому
Цитата ("wm_webers"):
При ответи на вопрос нужен ли ООП? Необходимо еще основываться на поставленную задачу, вполне возможно что решение лучше будет сделанно через процедуры.

ООП вообще не решает задач типа лучше/хуже. Это совсем из другой области.
Степан Б.
2 повідомлення
#15 років тому
Цитата ("elosoft"):
ООП вообще не решает задач типа лучше/хуже.

Для данного случая решает.
Цитата ("elosoft"):
Это совсем из другой области.

Область как раз та самая которая нужна. Человек хочет сделать свою CMS(или компоненты) для того что бы не начинать писать каждый проект с нуля, а ООП решить его проблему, но только если это будет проект не маленького размера.
Евгений О.
2989 повідомлень
#15 років тому
Хочет делать cms - на здоровье. а знать что такое ооп и для чего оно нужно не помешает.
Евгений О.
2989 повідомлень
#15 років тому
Кстати не в одном скриптовом языке ооп не существует вовсе. есть только интефейс, позволяющий описывать и вызывать объекты и их свойства, функции аналогично тому, как это принято в ооп.
Николай Г.
601 повідомлення
#15 років тому
Цитата ("elosoft"):
При ответи на вопрос нужен ли ООП? Необходимо еще основываться на поставленную задачу, вполне возможно что решение лучше будет сделанно через процедуры.

ООП решает только одну задачу - делает разработку, а главное, взаимодействие между разными людьми, работающими в 1 проекте в десятки, сотни раз продуктивнее.
ООП не может сделать что-то "лучше" чем процедурный алгоритм.
Евгений О.
2989 повідомлень
#15 років тому
Цитата ("dervinar"):
ООП решает только одну задачу - делает разработку, а главное, взаимодействие между разными людьми, работающими в 1 проекте в десятки, сотни раз продуктивнее.
ООП не может сделать что-то "лучше" чем процедурный алгоритм.

ООП вообще наплевать на разработчика и его потуги. Задача ООП - избавить ОС от размещения в памяти одних и тех же кусков кода. Это один из вариантов решения задачи многократного использования кода (не путать с аналогичной задачей в IDE). Но именно для ОС, а не для разработки! А то, что разработчики ООП грамотно приспособили потребности ОС к методике написания кода (за что им огромное спасибо)- совершенно другой вопрос.

Не прередегивайте понятия ООП и методики программирования. Это разные вещи. Хотя ООП и расшифровывается как "Объектно Ориентированное Программирование", его задача в минимизации кода для ОС, а не способ избавить программиста от копирования кусков кода. Кстати, если одинаково грамотно написать код с использованием ООП и без него, то текст кода с использованием ООП будет процентов на 10-15 больше, чем без него, а вот использование памяти совсем наоборот (и разница может быть в разы и порядки, а не десяток процентов).
Евгений О.
263 повідомлення
#15 років тому
Цитата ("elosoft"):
Кстати не в одном скриптовом языке ооп не существует вовсе. есть только интефейс, позволяющий описывать и вызывать объекты и их свойства, функции аналогично тому, как это принято в ооп.

А если скриптовый язык (кстати говоря, чем скриптовый язык отличается от всех прочих?) обеспечивает инкапсуляцию данных, наследование классов и (не побоюсь этого слова) полиморфизм, то может быть все-таки можно допустить, что в таком языке "существует ООП"?
Евгений О.
2989 повідомлень
#15 років тому
Цитата и есть ответ на вопрос.

А отличается скриптовый язык от других тем, что это языки сценариев. Чтобы воду не лить лучше посетить вот это
Евгений О.
263 повідомлення
#15 років тому
Цитата ("elosoft"):
ООП вообще наплевать на разработчика и его потуги.


Ох, а они-то все нам вкручивали, что они только о разработчиках-программистах и пекутся .

Цитата ("elosoft"):
Задача ООП - избавить ОС от размещения в памяти одних и тех же кусков кода.


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

Цитата ("elosoft"):
Это один из вариантов решения задачи многократного использования кода (не путать с аналогичной задачей в IDE).


Причем тут IDE... Использовать ООП можно и без IDE, динамические библиотеки, тоже, без IDE обходятся.

Цитата ("elosoft"):
Но именно для ОС, а не для разработки! А то, что разработчики ООП грамотно приспособили потребности ОС к методике написания кода (за что им огромное спасибо)- совершенно другой вопрос.


Я подозреваю, что подавляющая часть того, что мы называем "ОС Linux" написана без использования принципов ООП. Просто ООП появилось много позже, чем Linux.

Цитата ("elosoft"):
...Кстати, если одинаково грамотно написать код с использованием ООП и без него, то текст кода с использованием ООП будет процентов на 10-15 больше, чем без него, а вот использование памяти совсем наоборот (и разница может быть в разы и порядки, а не десяток процентов).


Боюсь, что наоборот: объем исходного текста написанного по методологии ООП будет меньше (может быть даже и в "разы", чем объем текста написанного без ООП, однако объемы памяти и времени потребных для выполнения этого текста, будут больше, может быть и не на порядки, но в десятки процентов почти наверняка.
Евгений О.
2989 повідомлень
#15 років тому
Что ж вы все в кучу валите? ооп и библиотеки, ос и и ее использование.
Цитата ("Illarion_SA"):
Боюсь, что наоборот: объем исходного текста написанного по методологии ООП будет меньше (может быть даже и в "разы", чем объем текста написанного без ООП, однако объемы памяти и времени потребных для выполнения этого текста, будут больше, может быть и не на порядки, но в десятки процентов почти наверняка.

а вот за это, будь я преподавателем, не задумываясь поставил бы кол с минусом.
Евгений О.
263 повідомлення
#15 років тому
Цитата ("elosoft"):
А отличается скриптовый язык от других тем, что это языки сценариев. Чтобы воду не лить лучше посетить вот это ]http://ru.wikipedia.org/wiki/Скриптовый_язык


Спасибо за ссылку, посмотрел. Хорошее определение, звучит как: "жидкость называется жидкостью, потому что она жидкая". Собственно вопрос был, чем именно отличается скриптовый язык от не скриптового.

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

В свете этого определения, язык Java можно рассматривать как язык интерпретируемый, поскольку исходный текст Java переводится компилятором в промежуточный код, который затем выполняется так.наз. JVM входящей в состав JRE. В том что Java это язык в высшей степени объектно-ориентированный, наверное, сомнений ни у кого нет.

Продолжая разговор о том, что "не в одном скриптовом языке ооп не существует вовсе." на память приходит язык python, в первой строке мануала на python (man python) написано:

Цитата:
python (1) - an interpreted, interactive, object-oriented programming language


В общем и целом, парадигмы ООП гораздо проще реализовать на интерпретируемом языке, нежели на компилируемом - в подтверждении этого, можно сравнить объем дистрибутива, скорость компиляции и количество обнаруженных ошибок для компилятора gcc и, например, интерпретатора python.
Евгений О.
263 повідомлення
#15 років тому
Цитата ("elosoft"):
...
Цитата ("Illarion_SA"):
Боюсь, что наоборот: объем исходного текста написанного по методологии ООП будет меньше (может быть даже и в "разы", чем объем текста написанного без ООП, однако объемы памяти и времени потребных для выполнения этого текста, будут больше, может быть и не на порядки, но в десятки процентов почти наверняка.

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

Скажите, а в каком учебном заведении Вы преподаете?
Николай Г.
601 повідомлення
#15 років тому
Цитата ("elosoft"):
Цитата (Illarion_SA):
Боюсь, что наоборот: объем исходного текста написанного по методологии ООП будет меньше (может быть даже и в "разы", чем объем текста написанного без ООП, однако объемы памяти и времени потребных для выполнения этого текста, будут больше, может быть и не на порядки, но в десятки процентов почти наверняка.

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

Видимо именно поэтому, Вы и не являетесь преподавателем.
Концепции ООП впервые были применены в языке Симула, который собственно предназначался для описания моделей, и разработчики о производительности задумывались крайне мало. Для производительности были абсолютно другие языки, насквозь процедурные(BCPL например) Было это, к слову, еще в 67 году.

Абсолютно согласен с Illarion_SA, обьемы памяти и время выполнения для среднестатистических (и не очень масштабных, которые пишет 1 человек в течении непродолжительного времени) проектов в случае применения ООП не уменьшаются а только возрастают. Другое дело, что при достаточно масштабных проектах, которые пишет большое количество человек, за счет использования ООП можно добиться большей продуманности системы в целом, скорее всего даст преимущества в производительности. Но только за счет большей продуманности и нормальной реализации вместо "костылей", а никак не за счет какой то там экономии ресурсов. Уважаемый elosoft, Вам я бы посоветовал выучить таки C и С++, попробовать реализовать одни и те же вещи на них и сделать выводы насчет скорости написания, производительности обьема исполняемых файлов кстати, и используемой при работе оперативной памяти. Налицо клиническое непонимание самой обсуждаемой парадигмы программирования.
Евгений О.
2989 повідомлень
#15 років тому
Я не думаю, что мне надо повторно учить с, с++, а также pascal, basic, foxpro и кое что другое, а также их объектно-ориентированные версии. я просто изложу свое видение вопроса.
Оффтопик
Давним давно, лет 50 назад плюс минус еще лет 20, короче на заре человечества, жизнь программистов была раем. Они гордо писали короткие программы, вычисляющие 1+1, 2+2, 3+3 и т.п. и длинные статьи о том, почему они не работают. И за это платили деньги!

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

К сожалению, редко кому удавалось обеспечить себе пожизненное существование, написав одну единственную программу. Рано или поздно большинству из них приходилось начинать новую. И тут кто-то из них заметил, что в программе вычисляющей 1+1 и программе вычисляющей 2+2 большая часть кода абсолютно одинаковая!

Лень движитель прогресса! Лень было человеку пешком ходить – он автомобиль придумал. Программисты, в этом план, ничем не отличаются от простых смертных. Самые умные (а может ленивые) из них сразу озадачились вопросом: как бы писать поменьше, а получать побольше, ну и заодно сократить объем исходного кода? Учитывая, что использование метода copy/paste в те времена было затруднительно ввиду отсутствия дисплея и ныне привычной клавиатуры и то, что большинство тогдашних программистов компьютер в глаза не видели и даже слова такого не знали, вопрос повторного использования кода был совсем не прост. Постоянно перекладывать кучи перфокарт или переклеивать куски перфолент совсем не подарок! А на магнитной ленте так вообще ничего не видно!

Из всех этих извращений родилось понятие подпрограмм. Правда пришлось отказаться от привычного линейного программирования и ввести возможность вычисления адресов и переходов ни них. Но это уже мелочи. Теперь для вычисления 1+1, 2+2 и т.д. требовалась лишь одна функция с возможностью передачи в нее нужных параметров. Программисты были счастливы и были уверенны, что ближайшие века их работа будет сводиться только к передаче этих самых параметров, но… В любом деле есть свое но! Здесь им стали системщики.

Когда появилась возможность запускать на одном компьютере более чем одну программу, выяснилось, что эти программы опять по большей части повторяют друг друга и в памяти в разных местах развешаны одни и те же куски кода. Немало народу полегло в попытках умыкнуть эти куски из одной программы в другую. Конец этим не нужным жертвам положил очередной гений, чтоб ему…, т.е. счастья и удачи. Может этим гением был не один человек, а целый коллектив. А с коллективом шутки плохи! Не плюй в коллектив, коллектив плюнет – ты утонешь! Короче, этот самый который гений, придумал систему указателей. Т.е. заливаем в память по некоторому адресу некий код и обзываем его объект. А указатель дает возможность найти этот самый объект. Мало того, он придумал систему последовательной связей указателей. Получилась иерархическая система объектов. А весь список указателей свел в таблицу и запихнул ее в память компьютера.

Не беда, что, например в windows, таблица указателей может быть побольше приличной программы, что половину времени выполнения программы стали тратить не на что-то полезное, а на вычисление адресов и переходы по ним, не беда, что для этой, вроде бы простой задачи, пришлось вводить принципиально новые понятия наследования, полиморфизма, инкапсуляции и т.п.. Зато теперь каждый придур…, пардон, программист мог написать некий код, назвать его MyObject, вписать в него массу полезной информации о размере своих тапочек, имени любимой девушки, вычисления фаз Луны, а также ссылку на родительский объект, в надежде, что там все-таки найдется функция, которая сумеет вычислить сколько будет 1+1, и разместить этот объект в памяти компьютера на веки вечные.

Кое-какие полезные изменения для компьютера все же произошли. Все потомки объекта могут использовать его видимый для них код (а могут и не использовать) без повторения этого самого кода. Для того чтобы вычислить 2+2 теперь не обязательно писать все с нуля. Не обязательно даже знать, как вообще это делается 2+2. Можно, например, два раза вызвать функцию родителя, которая вычисляет 1+1... А можно изгаляться и по круче.

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

А чтобы как-то заставить программистов бережно относиться к ресурсам и использовать все эти нововведения, было введено понятие «Объектно-ориентированное программирование» (ООП). В нем популярно и доходчиво изложено как простой программист может увековечить сведения о своих тапочках и как сделать так, чтобы другие пользователи тапочек могли эту ценную информацию применить для себя.
Фрилансер У.
248 повідомлень
#15 років тому
Чума!
elosoft
Откуда Вы это выкопали?
Николай Г.
601 повідомлення
#15 років тому
elosoft, действительно, написано хорошо, душевно
Евгений О.
263 повідомлення
#15 років тому
Цитата ("elosoft"):
Я не думаю, что мне надо повторно учить с, с++, а также pascal, basic, foxpro и кое что другое, а также их объектно-ориентированные версии. я просто изложу свое видение вопроса.
Оффтопик
Давним давно, лет 50 назад плюс минус еще лет 20, короче на заре человечества, жизнь программистов была раем. Они гордо писали короткие программы, вычисляющие 1+1, 2+2, 3+3 и т.п. и длинные статьи о том, почему они не работают. И за это платили деньги!
...

Живенько написано, но хорошо бы покороче. Жаль еще, что к действительности имеет мало отношения. Можно начать с того, что "на заре человечества" программисты писали "программки" для численного моделирования ядерных реакторов и для решения задач газовой динамики. Вычисления "1+1" даже в те времена повсеместной дикости делались на аппаратном уровне - с помощью паяльника, километра медной проволоки и дрессированных электронов. Концепция указателя (косвенная адресация) появилась задолго до того, как теоретики от программирования отлили чеканную фразу "объектно-ориентированный подход" и доказали всем (начиная с грантодателей), что это хорошо.
Евгений О.
2989 повідомлень
#15 років тому
To werewolf понравилось? вот думая смежную специальность освоить. и там писать, и здесь писать... клавиатура пластмассовая, все выдержит.

to Illarion_SA
Цитата ("Illarion_SA"):
Можно начать с того, что "на заре человечества" программисты писали "программки" для численного моделирования ядерных реакторов и для решения задач газовой динамики. Вычисления "1+1" даже в те времена повсеместной дикости делались на аппаратном уровне - с помощью паяльника, километра медной проволоки и дрессированных электронов.

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