powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Критерий уровня абстракции (слоя абстракции)
25 сообщений из 939, страница 1 из 38
Критерий уровня абстракции (слоя абстракции)
    #38314904
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос по теории:
какие изменения в коде являются минимальным новым слоем абстракции?

Код: sql
1.
2.
3.
4.
5.
print 1; print 2; print 3;

# является ли этот кусок кода случаем добавления слоя абстракции
list = array(1, 2, 3);
foreach(list : x) print x;



Можно ли вообще считать минимальным слоем абстракции переменную?

Код: sql
1.
2.
3.
4.
5.
print 1;

# является ли этот кусок кода случаем добавления слоя абстракции
x = 1
print x
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38314921
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixВопрос по теории:
какие изменения в коде являются минимальным новым слоем абстракции?

Код: sql
1.
2.
3.
4.
5.
print 1; print 2; print 3;

# является ли этот кусок кода случаем добавления слоя абстракции
list = array(1, 2, 3);
foreach(list : x) print x;



Можно ли вообще считать минимальным слоем абстракции переменную?

Код: sql
1.
2.
3.
4.
5.
print 1;

# является ли этот кусок кода случаем добавления слоя абстракции
x = 1
print x


как по мне, слой абстракции - это что-то более глобальное, что позволяет Вам не задумываться что происходит на более низком уровне. Например, assembler - это новый уровень абстракции, позволяющий не вникать в машинные кода и их структуры, значения. Не читать многотонные справочники по этим кодам и коммандам процессора.
Высокоуровневые компиляторы (типа pascal или C, C++) - это новый уровень абстракции., когда не думаешь об устройстве и особенностях процессора
windows API - новый уровень... когда не задумываешся, что происходит во время создания окна, создания кнопки и т.д. ... просто скомандовал что-то сделать, и это сделалось
OpengGL - тоже уровень абстракции. Написал одну комманду и всё... видеокарта определила расширение в котором отрабатывается вся графика. Написал вротую - появился источник света со всеми оттенками цветов... углами отражения и т.д.
JQuery - написал искать по селектору, и не думаешь о разных переборах... не думаешь об таймерах анимации при перетаскивании объекта и всё такое...

То есть, переменная не есть новый уровень абстракции, так как работа с ней заставляет чётко задуматься, что в ней храниться и почему.. кто это записал, что с этим делать.

НО... Функция - это уже другое дело... Надо посчитать степень числа.. написал например pow(a, 25) и тебе всёровно как это будет сделано... знаешь что на выходе получишь "а" в степени 25.
Написал функцию WriteCube... И используя её чётко знаешь, что подав верные данные на вход, получишь изображения куба на выходе... Вот это уже абстракция.

Могу ошибаться, но по-моему именно так. Минимальный уровень абстракции - это функция.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38314997
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрМогу ошибаться, но по-моему именно так. Минимальный уровень абстракции - это функция.

Код: sql
1.
2.
3.
4.
printX(1);

# вот это минимальная абстракция что ли?
printX(a) { print a; }



какая в данном случае разница между присвоением значения конфиграционному параметру и вызовом функции? почему ошибочно считать глобальный конфигурационный параметр абстракцией, а глобальную функцию уже можно считать абстракцией

Код: sql
1.
2.
3.
4.
debugMode = 1

# а внутри программы этот параметр используется тысячи раз в разных местах
if (debugMode) log() 



ошибочно ли считать задание debugMode = 1 аналогом определения функции printX(a) { print a; }?
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315008
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Преременная - абстракция, список элементов/перемкнных - абстракция. Функция - абстракция.
Почитайте что-нибудь по философии что-ли.

Переменная - потому абстракция, что мы отказываемся от рассмотрения её природы или значения (литры водки, килограммы железа), а оперируем ею, как она есть. Список - то же самое. Функция - немного другой уровень абстракции, который позволяет, согласно существующим правилам, оперировать абстракциями, типа "переменная", или "список".

Вообще-то, говоря об иголках, мы абстрагируемся от колючего объекта, типа ёжика, кактуса, или иголки пуговицу пришить.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315011
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

ну смотрите... функция printX выводит на экран значение, которое Вы в неё передали. А что делает переменная debugMode? А по сути она ничего не делает :) ну просто не умеет она ничего делать сама по себе. Она за собой ничего не скрывает.

То есть, вот я у Вас спрошу, знаете ли Вы, что храниться в ячейке, на которую указывает переменная debugMode? И Вы уверенно ответите, что знаете... и разумеется там хранится флаг, который определяет режим отладки. Как это работает всё, вы тоже думаю без проблем расскажите (хотя тут немного сложнее, так как сама возможность обработки ячеек по имени позволяет не задумываться об том, как данные там хранятся)

А вот если у Вас спросить как работает функция printX, Вы ответите: "а фиг знает как, она на экран выводит переданное значение, больше мне знать не надо" (если это конечно не Ваша функция, и она определена например в dll библиотеке, то есть исходники недоступны).

Вот и всё.... уровень абстракции :)
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315016
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergeLumix,

Преременная - абстракция

Переменная - потому абстракция, что мы отказываемся от рассмотрения её природы или значения (литры водки, килограммы железа), а оперируем ею, как она есть

А вот тут поспорю :)
Код: pascal
1.
2.
3.
a: integer;
b: integer;
c: single; 


Как посчитать переменную c из a и b? Не известно... Ок, задумаемся об природе переменных (и переименуем их нормально)
Код: pascal
1.
2.
3.
v: integer; //скорость
S: integer; //расстояние
t: single; //время


Теперь стало понятнее... как посчитать t из v и S? скажете с лёту t:=S/v; и будете не правы. Так как не задумались об единицах измерения (как Вы говорили литры, килограммы) задумываемся об единицах измерения
Код: pascal
1.
2.
3.
v: integer; //скорость (м/с)
S: integer; //расстояние (км)
t: single; //время (секунды)


Во. А теперь можно считать. t:=S/v*1000; Вот только теперь правильно.

То есть, что бы работать с переменной нам НАДО знать её природу и единицы измерения (значение). А Вы можете доказать обратное? :)
А это уже не абстракция... Узнайте адрес ячейки в которой хранится данная переменная и работая через этот адрес, Вы без каких либо потерь сможете написать точно то же самое без использования переменной вообще :)
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315018
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрВот и всё.... уровень абстракции :)

Если переменная это не уровень абстракции, то как тогда может выглядеть минимальный пример с двумя уровнями абстракции?
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315029
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure sayHello();
begin
  write('hello')
end;

procedure sayHelloEx(name: string);
begin
 sayHello();
 write(', ', name, '!');
end;
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315162
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели любой вызов любой функции порождает уровни абстракции???

Код: sql
1.
a(b(c(d(e("Привет")))))



Это пять уровней абстракции что ли??

Код: sql
1.
2.
3.
4.
5.
6.
a(x);
a(x) { b(x); }
b(x) { c(x); }
c(x) { d(x); }
d(x) { e(x); }
e(x) { print x; }



Неужели количество уровней абстракции равняется текущему кадру стека???
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315238
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Я надеюсь в реальных проектах Вы ничего подобного не пишите? :)
В теории (в моём понимании) любая функция - новая абстракция. На практике же описанные ситуации если и появляются, то ооооочень редко :).
Скажем, я не буду писать вот так никогда:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure a(param: integer);
begin
 if (param<10) then writeln('less than 10');
end;
procedure b(param: integer);
begin
 a(param);
 if (param>=10 and param<20) then writeln('less than 20');
end;
procedure c(param: integer);
begin
 b(param);
 if (param>=20 and param<30) then writeln('less than 30');
end;
...


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

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

P.P.S. Стэк вызовов не имеет ничего общего с подсчётом абстракций. Ведь я не обязан вызывать другую функцию в своей например. я могу с тем же успехом обрабатывать результат другой функции (что является частой ситуацией).
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315249
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрВ теории (в моём понимании) любая функция - новая абстракция.

Вопрос не в абстракциях как таковых, а в слоях абстракции.

- - - - - - - -

PS. интересно связаны ли как-нибудь понятия слой абстракции и понятие переносимость (ака повторное использование)?

ПрограмёрСами понимаете, что в реальном коде это всё войдёт в одну функцию, которая и породит единый уровень абстракции.

Значит ли это что раскидывая эту сложную функцию на три вложенные функции мы на самом деле не создавали три уровня (слоя) абстракции, а лишь изменили структуру одного слоя внутри которого и остались?

Если да, то как тогда может выглядеть минимальный пример с двумя слоями абстракции? Или такой пример принципиально невозможен, потому что термин "слой абстракции" принципиально неотделим от смысла участков кода, а оперируя сигнатурами типа а(), b(), с() мы находимся за пределами прикладного смысла.

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

Неужели слой абстракции это всего лишь "более одной функции"? Мне почему-то кажется, что слой абстракции не связан с количеством функций.

- - - - - - - - - - - - - - -

функция это вообще это просто поименованный участок кода. можно ли два слоя абстракции выразить без функций в виде голой последовательности команд?

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

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

ПрограмёрP.P.S. Стэк вызовов не имеет ничего общего с подсчётом абстракций.

В сложившейся ситуации можно сформулировать такой вопрос: может ли быть например 5 кадров в стеке и при этом мы будем находится лишь в первом уровне абстраций или это всегда 100% означает что мы уже на пятом уровне (слое) абстракции?
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315260
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
// процедура с одним слоем абстракции
void run()
{
   Query query = prepare();
   if( execute( query ) ) printSuccess();
   else printError( query );
}

// процедура с разными слоями абстракции
void run1()
{
   Query query = "select * from table";
   query.prepare();

   string message;
   if( execute( query ) ) {
       message = "ok!";
   }
   else {
       message = "error #" + query.error();
   }
   printf( "%s", message );
}

стек вызовов, переменные, константы - это всё из других опер, совершенно разных, причём.

>> существует ли теоретическая возможность бесконечно наращивать код все время оставаясь в одном слое абстракции или проще говоря без слоя абстракции вообще?
да вообще без проблем, раньше так и писали, в одной толстой функции main()
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315278
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
// процедура с одним слоем абстракции
void run()
{
   Query query = prepare();
   if( execute( query ) ) printSuccess();
   else printError( query );
}

// процедура с разными слоями абстракции
void run1()
{
   Query query = "select * from table";
   query.prepare();

   string message;
   if( execute( query ) ) {
       message = "ok!";
   }
   else {
       message = "error #" + query.error();
   }
   printf( "%s", message );
}



А где во втором примере граница слоев? Каков критерий выделения этого слоя? Как отличить создание функций как создание слоя абстракций от создания функций как акт синтаксического подсластителя?
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315326
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixВопрос по теории:
какие изменения в коде являются минимальным новым слоем абстракции?Никакие.

P.S. Абстракции выделяются на этапе проектирования, а не на этапе кодирования.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315387
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixА где во втором примере граница слоев? Каков критерий выделения этого слоя? Как отличить создание функций как создание слоя абстракций от создания функций как акт синтаксического подсластителя?критерий очень простой - абстракция должна скрывать лишние детали реализации. Собственно, создание функции, как слоя абстракции - это и есть акт "подслащивания" кода, и ничего страшного в этом нет. Смысл в том, чтобы повысить читабельность и понятность кода, как для стороннего читателя, так и для самого аффтара нетленного произведения ))
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315480
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixКаков критерий выделения этого слоя? Как отличить создание функций как создание слоя абстракций от создания функций как акт синтаксического подсластителя?

Уровень абстракции - это очень абстрактное понятие. Оно ощущается интуитивно. Ну например, если я создам библиотеку (драйвер) из 20 функций облегчающих работу с видеокартой, то моя библиотека и будет новым уровнем абстракции при работе с видеокартой.
НО!!! если я раскидаю эти 20 функций в 2 библиотеки (драйвер + доп надстройка типа OpenGL), то эти же 20 функций создадут 2 уровня абстракции кода. НО!!! только если доп. надстройка будет использовать основной драйвер в своей основе иначе это будет 2 совсем не связанные друг с другом библиотеки с одним уровнем абстракции.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315548
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychкритерий очень простой - абстракция должна скрывать лишние детали реализации."Это" называется "инкапсуляция", а совсем не то, что вы подумали.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315552
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрОно ощущается интуитивно.... и неправильно.Ну например, если я создам библиотеку (драйвер) из 20 функций облегчающих работу с видеокартой, то моя библиотека и будет новым уровнем абстракции при работе с видеокартой.Не будет.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315575
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПрограмёрОно ощущается интуитивно.... и неправильно.Ну например, если я создам библиотеку (драйвер) из 20 функций облегчающих работу с видеокартой, то моя библиотека и будет новым уровнем абстракции при работе с видеокартой.Не будет.

я свои мысли рассказал и объяснил. Сделайте то же самое пожалуйста, раз считаете что я не прав :)
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315578
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovegorychкритерий очень простой - абстракция должна скрывать лишние детали реализации."Это" называется "инкапсуляция", а совсем не то, что вы подумали.
вот ЭТО называется икапсуляцией ))

так что тут Вы не правы)
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315583
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЭТО называется икапсуляцией ))А теперь ещё раз перечитайте статью в вики. А потом - ещё раз, но вдумчиво.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315596
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёря свои мысли рассказал и объяснил. Сделайте то же самое пожалуйста, раз считаете что я не прав :)Абстракция не обязана быть простой - её цель максимально обобщить ту или иную идею на широкий класс задач.
Скажем, абстракция "унифицированная виртуальная память" (UVM) предлагает однотипную работу с такими разными задачами, как "загрузка программного модуля" и "файловый ввод-вывод", но при этом - весьма нетривиальна в реализации.
Замечу, что возможно и другая абстракция - "есть только файловый ввод-вывод" и тогда задача "загрузка программного модуля будет реализована" поверх такой абстракции как отдельная задача. Вне рамок (выбранной) абстракции.
А в ваш пример - тривиальная обёртка, решающая сиюминутную задачу "упростить работу с конкретным API".
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315601
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Три — это куча? Нет, три — точно не куча.

Вот и все ваши рассуждения.
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315618
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovP.S. Абстракции выделяются на этапе проектирования, а не на этапе кодирования.

Значит ли это что чисто синтаксически слои абстракции невыразимы?
...
Рейтинг: 0 / 0
Критерий уровня абстракции (слоя абстракции)
    #38315621
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychкритерий очень простой - абстракция должна скрывать лишние детали реализации.

Значит ли это что если мы видим все детали реализации, то у нас уже нет двух или более слоев абстракции?

Является ли невозможность достать что-то критерием слоя? Например, если c() может достать а() только через b() то это и есть два слоя абстракции? Является ли инкапсуляция критерием слоя абстракции?
...
Рейтинг: 0 / 0
25 сообщений из 939, страница 1 из 38
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Критерий уровня абстракции (слоя абстракции)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]