Найти тему
Programmer

Основы программирования. Шлюзовые операции копирование и передача объектов напрямую.

Оглавление

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

Шлюзовые операции аналогичны проходу судна по каналу
Шлюзовые операции аналогичны проходу судна по каналу

Нашел картинку, которая в реальном мире описывает такие операции.

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

Что такое шлюзовые операции?

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

В программировании шлюзовые операции всегда происходят в методах-функциях или операторах, которые также "под капотом" являются функциями. Чаще всего шлюзовые операции происходят в операторе "=" и арифметических операциях, а также почти во всех функциях, которые "принимают" в скобках и "возвращают" значения или параметры или объекты.

Примеры шлюзовых операций на примере языков рода С:

int vasja = 5;

int par1 = 7; int par2 = 8; double w = Method (par1, par2);

a = 8+3;

В первом примере шлюзовой операцией является передача мгновенной переменной (литерала) 5 в целую переменную vasja, в шлюзовых операциях с оператором "=" всегда объект справа является поданным на вход, а позиция слева является выходом, а тип данных шлюзовой операции всегда здесь определяется объектом слева.

Во втором примере объявляются переменные целого типа par1 и par2 и затем объявляется дробная переменная w, которой одной шлюзовой операцией "=" присваивается значение с выхода другой шлюзовой операции из метода Method (int, int), причем сам метод принимает на вход два целых параметра int также через шлюзовую операцию входа в метод. При объявлении переменных par1 и par2 в начале также происходят шлюзовые операции , которые на вход справа получают литералы 7 и 8 и на выходе слева копируют эти литералы в две переменные.

В третьем примере переменная a (неизвестного типа) оператором "=" получает на выход какой-то объект, этот объект записывается в переменную a , на вход оператор "=" получает арифметическое выражение 8+3 с оператором "+", которое "под капотом" является методом или функцией с двумя параметрами на вход (int, int) целого типа. То есть здесь параметры 8 и 3 шлюзовой операцией передаются в оператор "+" и затем на выходе из метода-оператора "+" передается целое число 11 также шлюзовой операцией, далее происходит одно из двух вариантов действий. Если переменная a слева была целого типа int , то тогда этот тип и является типом всей шлюзовой операции "=" , тогда значение 11 справа целого типа копируется в переменную a , но если a была типа double (к примеру), то тогда справа от "=" произойдет операция автоматического приведения без скобок типа int в double , а эта операция "под капотом" также является еще одним методом, которому через шлюз на вход подаются данные одного типа и на выход он выдает значение другого типа.

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

Всего три случая шлюзовых операций!

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

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

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

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

Подписывайтесь и ставьте лайки, увидимся...