|
|
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Вопрос по теории: какие изменения в коде являются минимальным новым слоем абстракции? Код: sql 1. 2. 3. 4. 5. Можно ли вообще считать минимальным слоем абстракции переменную? Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2013, 23:42 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
LumixВопрос по теории: какие изменения в коде являются минимальным новым слоем абстракции? Код: sql 1. 2. 3. 4. 5. Можно ли вообще считать минимальным слоем абстракции переменную? Код: sql 1. 2. 3. 4. 5. как по мне, слой абстракции - это что-то более глобальное, что позволяет Вам не задумываться что происходит на более низком уровне. Например, assembler - это новый уровень абстракции, позволяющий не вникать в машинные кода и их структуры, значения. Не читать многотонные справочники по этим кодам и коммандам процессора. Высокоуровневые компиляторы (типа pascal или C, C++) - это новый уровень абстракции., когда не думаешь об устройстве и особенностях процессора windows API - новый уровень... когда не задумываешся, что происходит во время создания окна, создания кнопки и т.д. ... просто скомандовал что-то сделать, и это сделалось OpengGL - тоже уровень абстракции. Написал одну комманду и всё... видеокарта определила расширение в котором отрабатывается вся графика. Написал вротую - появился источник света со всеми оттенками цветов... углами отражения и т.д. JQuery - написал искать по селектору, и не думаешь о разных переборах... не думаешь об таймерах анимации при перетаскивании объекта и всё такое... То есть, переменная не есть новый уровень абстракции, так как работа с ней заставляет чётко задуматься, что в ней храниться и почему.. кто это записал, что с этим делать. НО... Функция - это уже другое дело... Надо посчитать степень числа.. написал например pow(a, 25) и тебе всёровно как это будет сделано... знаешь что на выходе получишь "а" в степени 25. Написал функцию WriteCube... И используя её чётко знаешь, что подав верные данные на вход, получишь изображения куба на выходе... Вот это уже абстракция. Могу ошибаться, но по-моему именно так. Минимальный уровень абстракции - это функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 00:29 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
ПрограмёрМогу ошибаться, но по-моему именно так. Минимальный уровень абстракции - это функция. Код: sql 1. 2. 3. 4. какая в данном случае разница между присвоением значения конфиграционному параметру и вызовом функции? почему ошибочно считать глобальный конфигурационный параметр абстракцией, а глобальную функцию уже можно считать абстракцией Код: sql 1. 2. 3. 4. ошибочно ли считать задание debugMode = 1 аналогом определения функции printX(a) { print a; }? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 11:36 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Lumix, Преременная - абстракция, список элементов/перемкнных - абстракция. Функция - абстракция. Почитайте что-нибудь по философии что-ли. Переменная - потому абстракция, что мы отказываемся от рассмотрения её природы или значения (литры водки, килограммы железа), а оперируем ею, как она есть. Список - то же самое. Функция - немного другой уровень абстракции, который позволяет, согласно существующим правилам, оперировать абстракциями, типа "переменная", или "список". Вообще-то, говоря об иголках, мы абстрагируемся от колючего объекта, типа ёжика, кактуса, или иголки пуговицу пришить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 12:27 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Lumix, ну смотрите... функция printX выводит на экран значение, которое Вы в неё передали. А что делает переменная debugMode? А по сути она ничего не делает :) ну просто не умеет она ничего делать сама по себе. Она за собой ничего не скрывает. То есть, вот я у Вас спрошу, знаете ли Вы, что храниться в ячейке, на которую указывает переменная debugMode? И Вы уверенно ответите, что знаете... и разумеется там хранится флаг, который определяет режим отладки. Как это работает всё, вы тоже думаю без проблем расскажите (хотя тут немного сложнее, так как сама возможность обработки ячеек по имени позволяет не задумываться об том, как данные там хранятся) А вот если у Вас спросить как работает функция printX, Вы ответите: "а фиг знает как, она на экран выводит переданное значение, больше мне знать не надо" (если это конечно не Ваша функция, и она определена например в dll библиотеке, то есть исходники недоступны). Вот и всё.... уровень абстракции :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 12:44 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
ShSergeLumix, Преременная - абстракция Переменная - потому абстракция, что мы отказываемся от рассмотрения её природы или значения (литры водки, килограммы железа), а оперируем ею, как она есть А вот тут поспорю :) Код: pascal 1. 2. 3. Как посчитать переменную c из a и b? Не известно... Ок, задумаемся об природе переменных (и переименуем их нормально) Код: pascal 1. 2. 3. Теперь стало понятнее... как посчитать t из v и S? скажете с лёту t:=S/v; и будете не правы. Так как не задумались об единицах измерения (как Вы говорили литры, килограммы) задумываемся об единицах измерения Код: pascal 1. 2. 3. Во. А теперь можно считать. t:=S/v*1000; Вот только теперь правильно. То есть, что бы работать с переменной нам НАДО знать её природу и единицы измерения (значение). А Вы можете доказать обратное? :) А это уже не абстракция... Узнайте адрес ячейки в которой хранится данная переменная и работая через этот адрес, Вы без каких либо потерь сможете написать точно то же самое без использования переменной вообще :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 13:02 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
ПрограмёрВот и всё.... уровень абстракции :) Если переменная это не уровень абстракции, то как тогда может выглядеть минимальный пример с двумя уровнями абстракции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 13:11 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Lumix, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 13:36 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Неужели любой вызов любой функции порождает уровни абстракции??? Код: sql 1. Это пять уровней абстракции что ли?? Код: sql 1. 2. 3. 4. 5. 6. Неужели количество уровней абстракции равняется текущему кадру стека??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 20:00 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Lumix, Я надеюсь в реальных проектах Вы ничего подобного не пишите? :) В теории (в моём понимании) любая функция - новая абстракция. На практике же описанные ситуации если и появляются, то ооооочень редко :). Скажем, я не буду писать вот так никогда: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Сами понимаете, что в реальном коде это всё войдёт в одну функцию, которая и породит единый уровень абстракции. А учитывая, что обычно для работы с чем-то требуется не одна функция, то получается что набор функций создадут этот уровень абстракции. Это всё толкается в библиотеку и на выходе получается что-то удобное и облегчающее жизнь программисту. P.S. Вот пока писал сообщение, мне вдруг подумалось. А ведь про константы мы забыли :) Ведь и константу можно назвать абстракцией. Вот только одноуровневой по сути, так как нельзя определить новую константу через существующую (это насколько я помню, хотя могу ошибаться). P.P.S. Стэк вызовов не имеет ничего общего с подсчётом абстракций. Ведь я не обязан вызывать другую функцию в своей например. я могу с тем же успехом обрабатывать результат другой функции (что является частой ситуацией). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 22:27 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
ПрограмёрВ теории (в моём понимании) любая функция - новая абстракция. Вопрос не в абстракциях как таковых, а в слоях абстракции. - - - - - - - - PS. интересно связаны ли как-нибудь понятия слой абстракции и понятие переносимость (ака повторное использование)? ПрограмёрСами понимаете, что в реальном коде это всё войдёт в одну функцию, которая и породит единый уровень абстракции. Значит ли это что раскидывая эту сложную функцию на три вложенные функции мы на самом деле не создавали три уровня (слоя) абстракции, а лишь изменили структуру одного слоя внутри которого и остались? Если да, то как тогда может выглядеть минимальный пример с двумя слоями абстракции? Или такой пример принципиально невозможен, потому что термин "слой абстракции" принципиально неотделим от смысла участков кода, а оперируя сигнатурами типа а(), b(), с() мы находимся за пределами прикладного смысла. Програмёр А учитывая, что обычно для работы с чем-то требуется не одна функция, то получается что набор функций создадут этот уровень абстракции. Это всё толкается в библиотеку и на выходе получается что-то удобное и облегчающее жизнь программисту. Неужели слой абстракции это всего лишь "более одной функции"? Мне почему-то кажется, что слой абстракции не связан с количеством функций. - - - - - - - - - - - - - - - функция это вообще это просто поименованный участок кода. можно ли два слоя абстракции выразить без функций в виде голой последовательности команд? ПрограмёрP.S. Вот пока писал сообщение, мне вдруг подумалось. А ведь про константы мы забыли :) Ведь и константу можно назвать абстракцией. Вот только одноуровневой по сути, так как нельзя определить новую константу через существующую (это насколько я помню, хотя могу ошибаться). Случай с константой показывает, что сразу несколько уровней абстракции могут использовать одну и ту же функцию самого низшего уровня, например, какую-нибудь утилитку. возникает вопрос: а как определить предельное число возможных слоев абстракции? существует ли теоретическая возможность бесконечно наращивать код все время оставаясь в одном слое абстракции или проще говоря без слоя абстракции вообще? ПрограмёрP.P.S. Стэк вызовов не имеет ничего общего с подсчётом абстракций. В сложившейся ситуации можно сформулировать такой вопрос: может ли быть например 5 кадров в стеке и при этом мы будем находится лишь в первом уровне абстраций или это всегда 100% означает что мы уже на пятом уровне (слое) абстракции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 22:52 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Lumix, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. стек вызовов, переменные, константы - это всё из других опер, совершенно разных, причём. >> существует ли теоретическая возможность бесконечно наращивать код все время оставаясь в одном слое абстракции или проще говоря без слоя абстракции вообще? да вообще без проблем, раньше так и писали, в одной толстой функции main() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2013, 23:43 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
egorych Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. А где во втором примере граница слоев? Каков критерий выделения этого слоя? Как отличить создание функций как создание слоя абстракций от создания функций как акт синтаксического подсластителя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 00:18 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
LumixВопрос по теории: какие изменения в коде являются минимальным новым слоем абстракции?Никакие. P.S. Абстракции выделяются на этапе проектирования, а не на этапе кодирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 06:05 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
LumixА где во втором примере граница слоев? Каков критерий выделения этого слоя? Как отличить создание функций как создание слоя абстракций от создания функций как акт синтаксического подсластителя?критерий очень простой - абстракция должна скрывать лишние детали реализации. Собственно, создание функции, как слоя абстракции - это и есть акт "подслащивания" кода, и ничего страшного в этом нет. Смысл в том, чтобы повысить читабельность и понятность кода, как для стороннего читателя, так и для самого аффтара нетленного произведения )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 09:19 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
LumixКаков критерий выделения этого слоя? Как отличить создание функций как создание слоя абстракций от создания функций как акт синтаксического подсластителя? Уровень абстракции - это очень абстрактное понятие. Оно ощущается интуитивно. Ну например, если я создам библиотеку (драйвер) из 20 функций облегчающих работу с видеокартой, то моя библиотека и будет новым уровнем абстракции при работе с видеокартой. НО!!! если я раскидаю эти 20 функций в 2 библиотеки (драйвер + доп надстройка типа OpenGL), то эти же 20 функций создадут 2 уровня абстракции кода. НО!!! только если доп. надстройка будет использовать основной драйвер в своей основе иначе это будет 2 совсем не связанные друг с другом библиотеки с одним уровнем абстракции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 11:00 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
egorychкритерий очень простой - абстракция должна скрывать лишние детали реализации."Это" называется "инкапсуляция", а совсем не то, что вы подумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 11:50 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
ПрограмёрОно ощущается интуитивно.... и неправильно.Ну например, если я создам библиотеку (драйвер) из 20 функций облегчающих работу с видеокартой, то моя библиотека и будет новым уровнем абстракции при работе с видеокартой.Не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 11:53 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПрограмёрОно ощущается интуитивно.... и неправильно.Ну например, если я создам библиотеку (драйвер) из 20 функций облегчающих работу с видеокартой, то моя библиотека и будет новым уровнем абстракции при работе с видеокартой.Не будет. я свои мысли рассказал и объяснил. Сделайте то же самое пожалуйста, раз считаете что я не прав :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 12:09 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovegorychкритерий очень простой - абстракция должна скрывать лишние детали реализации."Это" называется "инкапсуляция", а совсем не то, что вы подумали. вот ЭТО называется икапсуляцией )) так что тут Вы не правы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 12:12 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
ПрограмёрЭТО называется икапсуляцией ))А теперь ещё раз перечитайте статью в вики. А потом - ещё раз, но вдумчиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 12:14 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Програмёря свои мысли рассказал и объяснил. Сделайте то же самое пожалуйста, раз считаете что я не прав :)Абстракция не обязана быть простой - её цель максимально обобщить ту или иную идею на широкий класс задач. Скажем, абстракция "унифицированная виртуальная память" (UVM) предлагает однотипную работу с такими разными задачами, как "загрузка программного модуля" и "файловый ввод-вывод", но при этом - весьма нетривиальна в реализации. Замечу, что возможно и другая абстракция - "есть только файловый ввод-вывод" и тогда задача "загрузка программного модуля будет реализована" поверх такой абстракции как отдельная задача. Вне рамок (выбранной) абстракции. А в ваш пример - тривиальная обёртка, решающая сиюминутную задачу "упростить работу с конкретным API". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 12:25 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Три — это куча? Нет, три — точно не куча. Вот и все ваши рассуждения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 12:27 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovP.S. Абстракции выделяются на этапе проектирования, а не на этапе кодирования. Значит ли это что чисто синтаксически слои абстракции невыразимы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 12:38 |
|
||
|
Критерий уровня абстракции (слоя абстракции)
|
|||
|---|---|---|---|
|
#18+
egorychкритерий очень простой - абстракция должна скрывать лишние детали реализации. Значит ли это что если мы видим все детали реализации, то у нас уже нет двух или более слоев абстракции? Является ли невозможность достать что-то критерием слоя? Например, если c() может достать а() только через b() то это и есть два слоя абстракции? Является ли инкапсуляция критерием слоя абстракции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2013, 12:40 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38315621&tid=1341742]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
416ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 746ms |

| 0 / 0 |
