Skip to content

Latest commit

 

History

History
178 lines (139 loc) · 17.7 KB

File metadata and controls

178 lines (139 loc) · 17.7 KB

Введение

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

https://ru.wikipedia.org/wiki/Объектно-ориентированное_программирование

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

https://ru.wikipedia.org/wiki/Функциональное_программирование

	Функциона́льное программи́рование — парадигма программирования, в которой процесс
вычисления трактуется как вычисление значений функций в математическом понимании последних
(в отличие от функций как подпрограмм в процедурном программировании).
	Противопоставляется парадигме императивного программирования, которая описывает
процесс вычислений как последовательное изменение состояний (в значении, подобном
таковому в теории автоматов). При необходимости, в функциональном программировании
вся совокупность последовательных состояний вычислительного процесса представляется
явным образом, например, как список.

Модель Отношений - это язык метапрограммирования.

https://ru.wikipedia.org/wiki/Метапрограммирование

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

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

Привести аналогию с ООП

Модель Отношений относится к сущностно-ориентированному программирование, где сущность используется в качестве единственной фундаментальной концепции, т.е. предполагается, что всё есть сущность и нет ничего кроме сущностей.

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

Сущность это элемент бинарного отношения, а связь (т.е. тип бинарной связи) есть относительный аспект сущности. Такое представление позволяет описывать не только внешние отношения сущности, но и внутреннюю её модель - модель отношений.

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

  1. отношение субъекта
  2. отношение отношения
  3. отношение объекта Каждый из 3х аспектов (качеств) имеет своё значение и характеризует связанную сущность.

Всего существует 3 типа связи:

  1. с сущностью субъектом, т.е. сущностью выступающией в качестве субъекта
  2. с сущностью отношением, т.е. сущностью выступающией в качестве бинарного направленного отношения между субъектом и объектом
  3. с сущностью объектом, т.е. сущностью выступающией в качестве объект

https://ru.wikipedia.org/wiki/Бинарное_отношение

	Бина́рное (двухме́стное) отноше́ние — отношение между двумя множествами A и B,
то есть всякое подмножество декартова произведения этих множеств: R ⊆ A x B .
Бинарное отношение на множестве A — любое подмножество R ⊆ A² = A x A,
такие бинарные отношения наиболее часто используются в математике, в частности,
таковы равенство, неравенство, эквивалентность, отношение порядка.

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

Таким образом каждая сущность есть экземпляр определённого отношения между определённым субъектом и определённым объектом.

https://ru.wikipedia.org/wiki/Аспект

Аспе́кт (от лат. aspectus «вид, облик; взгляд, точка зрения») — одна из сторон
рассматриваемого объекта, то, как он видится с определённой точки зрения.

Таким образом у сущности есть 3 аспекта (качеств), в которых она может выступать в других сущностях:

  1. объект определяющий модель (Model)
  2. субъект определяющий представление (View)
  3. отношение определяющий контроллер (Controller)

У каждого проявления качества сущности есть 3 важных параметра:

  1. это сущность, которая проявляет качество, а именно: объекта, субъекта или отношения

  2. это сущность, в которой проявляется одно из качеств другой сущности: модель, представление или контроллер

  3. это сущность, характеризующая качество проявления: объективное, субъективное или качественное

В объектно-ориентированном программировании аналог сущности это активный объект, который одновременно имеет собственное состояние и выполняет определённую функцию.

Как пишет Гради Буч в 3 главе: Классы и объекты

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

В базе данных Модель Отношений хранится в виде ассоциативной модели данных.

https://en.wikipedia.org/wiki/Associative_model_of_data

	The associative model of data is a data model for database systems. Other data models,
such as the relational model and the object data model, are record-based. These models
involve encompassing attributes about a thing, such as a car, in a record structure.
Such attributes might be registration, colour, make, model, etc. In the associative model,
everything which has “discrete independent existence” is modeled as an entity, and
relationships between them are modeled as associations. The granularity at which data
is represented is similar to schemes presented by Chen (Entity-relationship model);
Bracchi, Paolini and Pelagatti (Binary Relations); and Senko (The Entity Set Model).
	A number of claims made about the model by Simon Williams, in his book
The Associative Model of Data, distinguish the associative model from more traditional models.

Модель Отношений обладает рефлексией, т.е. на МО возможно рефлексивно-ориентированное программирование.

https://ru.wikipedia.org/wiki/Отражение_(программирование)

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

Представление Модели Отношений в json обладает гомоиконичностью.

https://ru.wikipedia.org/wiki/Гомоиконичность

	Гомоикони́чность (гомоиконность, англ. homoiconicity, англ. homoiconic, от греч. ὁμός — равный,
одинаковый + «икони́чность» — отношение подобия между знаком и объектом, на который
данный знак указывает (см. семиотика) — в свою очередь, от ср.-греч. εἰκόνα — «о́браз»,
«изображение») — свойство некоторых языков программирования, в которых структура
программы похожа на его синтаксис, и поэтому внутреннее представление программы можно
определить, прочитав текстовую разметку. Если язык гомоиконичен, это означает,
что текст программы имеет такую же структуру, как её абстрактное синтаксическое дерево
(то есть AST и синтаксис являются изоморфными). Это позволяет всему коду на языке быть
доступным и обработанным в качестве данных, используя одно и то же представление.
	В гомоиконичном языке первичное представление программ является также структурой
данных в примитивном типе самого языка. Это делает метапрограммирование проще, чем
на языке без этого свойства, поскольку код может рассматриваться как данные: рефлексия
в языке (определение структуры программы во время выполнения) основана на единой,
однородной структуре, и не нужно обрабатывать несколько различных конструкций, которые
возникают в сложных синтаксических конструкциях. Говоря иначе, гомоиконичность — это когда
исходный код программы пишется как базовая структура данных и язык программирования знает,
как получить к ней доступ.