Программные типы. Общие положения.
- 11.05.14 г. -


Анализ платформы .Net Framework (Microsoft Co.) предопределил, как уже указывалось на сайте, ряд направлений исследований, которые важны для развития вообще программирования. Несомненно, по ним ведутся работы в корпорации, но и в современной диалектике ведутся соответствующие исследования. Однако сейчас, продолжая обозначение вопросов программирования, в определенном смысле в противовес исследованиям Microsoft Co. и ряду положений платформы .Net Framework, следует рассмотреть ряд важных аспектов, по которым обычное программирование может иметь представления только на основе эмпирики, незаурядного творчества специалистов и доработок обнаруживаемых ошибок. А диалектическое программирование осуществляет последовательное развитие познания в соответствующих направлениях и, соответственно, формирование сначала теоретических представлений, затем предметных представлений и, далее, конкретных программистских положений. Такой подход: выведение и обоснование программистских положений – несколько странен для обычного программирования и не развит в нем. В диалектическом программировании он, наоборот, широко применяется, и поэтому уже по ходу формирования отдельных представлений и теории в целом учитывается всё многообразие моментов и связей (про которое любили говорить диаматовцы, но никогда не реализовывали на практике) программистских положений, и исключаются многие неоднозначности и даже основы известных, широко обсуждаемых программных негативов.
    Поэтому в этой и некоторых последующих статьях (и в дискуссиях) рассмотрим ряд важных программистских положений, в теории которых или в теоретическом осознании которых в обычном программировании сделано слишком мало шагов.
    Указываемые в этой и последующих статьях аспекты могут стать предметом взаимовыгодного сотрудничества.


1. Предметная часть.


Одним из важнейших вопросов, по которым благодаря анализу платформы .Net Framework в диалектическом программировании достигнуто значительное продвижение вперед, является формирование программных типов, в т.ч. пользовательских типов.
    (При этом одним из важнейших аналитических положений стало то, что специалисты корпорации Microsoft, зная это или нет (это не важно), наглядно продемонстрировали практическое использование одного из важнейших положений философии Гегеля, которое обычно игнорируется науками. Но на деле оно применено корпорацией. Вот такой парадокс! Это положение не обсуждалось на сайте (указывалось другое, не менее важное – предрасположенность к построению суждений, которые в науках определены некорректно), и так как науками оно упорно игнорируется, то оставим его пока для нужд Microsoft Co. (если её специалисты осознанно сделали то, что сделали) и современной диалектики ...)
    А в этой статье пока, для начала, просто укажем ряд моментов и аспектов программных типов, которые могут стать предметом взаимовыгодного сотрудничества, без углубления в их диалектику (дальнейшее развитие материалов сайта будет строиться в соответствии с пожеланиями пользователей или в рамках дискуссий или взаимовыгодного сотрудничества).


А. Некоторые положения.

а. В обычном программировании программные типы введены в силу потребностей практики и развиты во всевозможных сочетаниях.

    А в диалектическом программировании программные типы выводятся; в частности, выводятся ссылочный тип (reference type)* и тип значений (value type). Понятно, что на тип значений можно указать, т.е. он может быть преобразован в ссылочный тип (в программировании – «упаковка»); обратное также возможно («распаковка»).
    Однако даже диалектическое определение типов, или их выведение, имеет своим пределом отдельные типы, которые, как и в обычном программировании, становятся, по сути, вещами в себе, даже если задается их структура (поля, методы…). Именно из-за этого нельзя учесть ряд моментов, в силу чего образуются известные сложности, в частности, такие:
а) сложности представления чисел (напр., когда тип double число 1 представляет как 0,999999…9…),
б) сложности унификации методов (например, для платформы .Net Framework были выявлены условности методов сравнения)
и др.
    Но в диалектическом программировании тип,
во-первых, выведен, т.е. имеется его посылка, точнее – её определение, т.е. имеется возможность раскрытия этого определения в отдельном типе,
во-вторых, преднамеренно фиксируется как вещь в себе, и это преодолевается диалектическим способом; именно это является принципиально важным моментом, отсутствующим в обычном программировании, что сводит определение типа в нём просто к декларированию, не учитывающему, как было сказано выше, ряд моментов, что, в свою очередь, приводит к неоднозначностям, сложностям и общеизвестным негативам (в т.ч. обсужденным при анализе платформы .Net Framework).
    Эти и другие вопросы мистичны для материалистичных наук и, поэтому, не развиты в обычном программировании. Однако именно эти вопросы нужно решать для развития программирования. (Но так как убеждение ученых в ограниченности материализма не входит в задачи проекта ДИАЛЕКТИКА, то оба диалектических положения – раскрытие определения в типе и преодоление вещи в себе – в данном случае пока можно не обсуждать и оставить для предметных дискуссий с заинтересованными лицами.)
    При этом важно такое положение: ни диалектическое выведение, ни обычное простое обозначение типов не является чем-то завершенным, и требуется принципиально иная дополнительная (вторая) процедура определения типов данных.
    Итак, тип данных в программировании не может быть строго определен даже при его диалектическом непосредственном выведении, и даже если задается структура типа: он становится, по сути, вещью в себе (тут про убогое эмпирическое предпосылание типа данных в обычном программировании речь вообще не идет). И требуется принципиально иная, дополнительная (вторая) ипостась (сторона) определения типа данных. Этого обычное программирование даже представить себе не может (не в смысле фантазий, а в смысле отсутствия в нём соответствующих теоретизаций: в нём попросту нет нужных инструментов).

А нужно ли корректно определять типы?
    Лучше так спросить: нужно ли добиться в программировании исключения некорректности представления чисел, неоднозначности функционирования ряда методов и др.?
    Если программисты считают, что «да», то они должны исправить соответствующие недостатки (только вот многие недостатки можно определить лишь при наличии соответствующей теории…).
    А в диалектическом программировании в процессе выведения типов имманентно присутствуют (учитываются) объективные положения, которые, во-первых, избавляют выводы диалектического программирования от эффекта вещи в себе, и, во-вторых, дают представления о раскрытии в отдельном типе определения его посылки.
    При этом в диалектическом программировании обнаружено свойство, которое называется эффектом типов данных (см. «Типов данных эффекты»).


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


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


г. С выведением и переопределением типов данных так или иначе также связаны
– понятие наследования (см. «Наследования идентификация в диалектическом программировании»),
– понятие полиморфизма (см. «Полиморфизма идентификация в диалектическом программировании»),
– переопределение и перегрузка методов (см. п. «Метода переопределения возможность в диалектическом программировании»),
– понятие экземпляра (см. п. «Экземпляра идентификация в диалектическом программировании»).
    При этом выведение понятия экземпляра (класса), также отсутствующее в обычном программировании, весьма важно, так как позволяет а) унифицировать указанные только что и другие понятия и, следовательно, избежать ряда несоответствий и б) расширить функциональность программных парадигм.
    При этом следует отметить то, что наследование, создание экземпляра и переопределение ссылочного типа – это три различных операции (теоретическое различение которых отсутствует в обычном программировании), что составляет очень важное само по себе положение, которое актуально для создания новых программных возможностей и вообще для развития программных парадигм.


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


е. Определение типов данных в диалектическом программировании не связывается с выделением в некоторых случаях определенных ссылочных типов (например, метод и массив в C#); это – важное методологическое положение, отсутствующее в обычном программировании. (Из этого следует еще один эффект типа данных.)


ж. Наследование и переопределение типов данных могут быть обобщены: см. «Наследования обобщение» и «Типов данных переопределения обобщение».
    Это важно в смысле применения понятий более сложных новых логик.


Существенны и другие положения.


Б. Некоторые результирующие положения и выводы.

Выведение программных типов определило ряд важных положений и преимуществ диалектического программирования.

Во-первых, как ужеговорилось на сайте, в диалектическом программировании помимо известных типов был введен принципиально новый тип данных.

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

В-третьих, расширено понятие класса в программировании.

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


* Здесь и далее используются определения обычного программирования.

[Продолжения: «Типов данных переопределение» и «Методов идентификация в диалектическом программировании».
    См.
– «Типов данных эффекты», «Типы программные в диалектическом программировании»,
– «Диалектическое программирование: структурное построение» и «Диалектическое программирование: особые положения».]



2. Дискуссионная часть
[в рамках проекта ДИАЛЕКТИКА].

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

б. Для предметных дискуссий в рамках Академии диалектики и диалектической философии предоставляются ссылки на дополнительные материалы.

в. Вопросы, предложения, сообщения и т.д. можно присылать на сайт через Контакты, а также на различные вспомогательные и дополнительные ресурсы сайта.

г. Для новых пользователей и для новых ветвей обсуждений могут быть созданы дополнительные дискуссионные площадки; заявки и предложения присылать через Контакты.


3. Другие обсуждения: http://all-discussions.livejournal.com/55503.html.