~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ CAA48827A51EE15E6AE64CC7C040F700__1717657260 ✰
Заголовок документа оригинал.:
✰ Abstraction (computer science) - Wikipedia ✰
Заголовок документа перевод.:
✰ Абстракция (информатика) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Data_abstraction ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/ca/00/caa48827a51ee15e6ae64cc7c040f700.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/ca/00/caa48827a51ee15e6ae64cc7c040f700__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:17:31 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 6 June 2024, at 10:01 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Абстракция (информатика) — Википедия Jump to content

Абстракция (информатика)

Из Википедии, бесплатной энциклопедии
(Перенаправлено из Абстракция данных )

В разработке программного обеспечения и информатике абстракция это процесс обобщения конкретных деталей. [1] такие как атрибуты , от изучения объектов и систем , чтобы сосредоточить внимание на более важных деталях. [2] Абстракция — фундаментальная концепция в информатике и разработке программного обеспечения , особенно в рамках парадигмы объектно-ориентированного программирования . [3] Примеры этого включают:

Обоснование [ править ]

Суть абстракции заключается в сохранении информации, актуальной в данном контексте, и забвении информации, нерелевантной в этом контексте.

Джон В. Гуттаг [5]

Вычисления в основном работают независимо от конкретного мира. Аппаратное обеспечение реализует модель вычислений , взаимозаменяемую с другими. [6] Программное обеспечение имеет архитектуру , позволяющую людям создавать огромные системы, концентрируясь на нескольких проблемах одновременно. Эти архитектуры состоят из определенного выбора абстракций. Десятое правило Гринспана — это афоризм о том, что такая архитектура одновременно неизбежна и сложна.

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

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

Некоторые абстракции пытаются ограничить диапазон понятий, которые должен знать программист, полностью скрывая абстракции, на которых они построены. Инженер-программист и писатель Джоэл Спольски раскритиковал эти усилия, заявив, что все абстракции негерметичны – что они никогда не смогут полностью скрыть детали ниже; [7] однако это не отменяет полезности абстракции.

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

Особенности абстракции [ править ]

Языки программирования [ править ]

Различные языки программирования предоставляют разные типы абстракции в зависимости от предполагаемого применения языка. Например:

Методы спецификации [ править ]

Аналитики разработали различные методы формальной спецификации программных систем. Некоторые известные методы включают в себя:

  • Метод на основе абстрактных моделей (VDM, Z);
  • Алгебраические методы (Larch, CLEAR, OBJ, ACT ONE, CASL);
  • Процессные методики (LOTOS, SDL, Эстель);
  • Трассировочные методы (СПЕЦИАЛЬНЫЕ, ТАМ);
  • Методы, основанные на знаниях (Refine, Gist).

Языки спецификации [ править ]

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

Абстракция управления [ править ]

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

a := (1 + 2) * 5

Человеку это кажется довольно простым и очевидным расчетом ( «один плюс два — три, умножить на пять — пятнадцать» ). Однако шаги низкого уровня, необходимые для выполнения этой оценки и возврата значения «15», а затем присвоения этого значения переменной «a», на самом деле довольно тонкие и сложные. Значения необходимо преобразовать в двоичное представление (часто это гораздо более сложная задача, чем можно было бы подумать), а вычисления разложить (компилятором или интерпретатором) на ассемблерные инструкции (опять же, которые гораздо менее интуитивно понятны программисту: такие операции, как сдвиг двоичного регистра влево или добавление двоичного дополнения содержимого одного регистра к другому — это просто не то, как люди думают об абстрактных арифметических операциях сложения или умножения). Наконец, присвоение результирующего значения «15» переменной с меткой «a», чтобы «a» можно было использовать позже, включает в себя дополнительные «закулисные» шаги по поиску метки переменной и ее результирующего местоположения в физической памяти. или виртуальную память, сохраняя двоичное представление «15» в этой ячейке памяти и т. д.

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

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

Структурное программирование [ править ]

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

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

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

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

Эти уровни создают эффект изоляции деталей реализации одного компонента и его различных внутренних методов от других. Объектно-ориентированное программирование охватывает и расширяет эту концепцию.

Абстракция данных [ править ]

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

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

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

Ручная абстракция данных [ править ]

Хотя большая часть абстракции данных происходит с помощью информатики и автоматизации, бывают случаи, когда этот процесс выполняется вручную и без вмешательства программирования. Один из способов понять это — абстракция данных в процессе проведения систематического обзора литературы. В этой методологии данные абстрагируются одним или несколькими абстракторами при проведении метаанализа , при этом ошибки уменьшаются за счет двойной абстракции данных с последующей независимой проверкой, известной как судебное решение . [10]

Абстракция в объектно-ориентированном программировании [ править ]

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

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

Common Lisp Object System или Self Например, в меньше различий между классами и экземплярами, а больше используется делегирование для полиморфизма . Отдельные объекты и функции абстрагируются более гибко, чтобы лучше соответствовать общему функциональному наследию Lisp .

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

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

Рассмотрим, например, пример фрагмента Java , представляющий некоторых обычных сельскохозяйственных «животных» на уровне абстракции, подходящем для моделирования простых аспектов их голода и кормления. Он определяет Animal класс для представления как состояния животного, так и его функций:

общественный   класс   Animal   расширяет   LivingThing 
 { 
      частное   местоположение   loc  ; 
       частные   двойные   энергетические резервы  ; 

       public   boolean   isHungry  ()   { 
          return   EnergyReserves   <   2.5  ; 
       } 
      public   void   eat  (  Food   food  )   { 
          // Потребляем еду 
          EnergyReserves   +=   food  .   Получить калории  (); 
       } 
      public   void   moveTo  (  Местоположение   .  )   { 
          Переместить в новое место 
          this  //   лок   =   местоположение  ; 
       } 
 } 

Используя приведенное выше определение, можно создавать объекты типа Животное и вызовите их методы следующим образом:

thePig   =   новое   животное  (); 
  theCow   =   новое   животное  (); 
  если   (  thePig  .  isHungry  ())   { 
     thePig  .   съесть  (  tableScraps  ); 
  } 
 Если   (  theCow  .  isHungry  ())   { 
     theCow  .   есть  траву  )  ; 
  } 
 корова  .   переместитьTo  (  TheBaRN  ); 

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

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

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

Объектно-ориентированный дизайн [ править ]

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

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

Соображения [ править ]

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

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

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

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

Абстракции могут оказаться полезными при работе с компьютерными программами, поскольку нетривиальные свойства компьютерных программ по существу неразрешимы (см. теорему Райса ). Как следствие, автоматические методы получения информации о поведении компьютерных программ должны либо отказаться от завершения (в некоторых случаях они могут дать сбой, выйти из строя или вообще не дать результата), либо от надежности (они могут предоставлять ложную информацию), либо от точности (они могут предоставлять ложную информацию). на некоторые вопросы они могут ответить «Я не знаю»).

Абстракция – это основная концепция абстрактной интерпретации . Проверка модели обычно происходит на абстрактных версиях изучаемых систем.

Уровни абстракции [ править ]

Информатика обычно представляет уровни (или, реже, слои ) абстракции, где каждый уровень представляет собой отдельную модель одной и той же информации и процессов, но с разным количеством деталей. На каждом уровне используется система выражения, включающая уникальный набор объектов и композиций, применимых только к определенной области. [11] Каждый относительно абстрактный, «более высокий» уровень основывается на относительно конкретном, «более низком» уровне, который имеет тенденцию обеспечивать все более «детализированное» представление. Например, вентили построены на электронных схемах, двоичные данные — на вентилях, машинный язык — на двоичном коде, язык программирования — на машинном языке, приложения и операционные системы — на языках программирования. Каждый уровень воплощается, но не определяется уровнем, находящимся под ним, что делает его языком описания, который в некоторой степени самодостаточен.

Системы данных баз

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

Уровни абстракции данных системы баз данных

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

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

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

Многоуровневая архитектура [ править ]

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

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

при проектировании систем , так и при проектировании бизнес-процессов Это можно использовать как . Некоторые процессы проектирования специально создают проекты, содержащие различные уровни абстракции.

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

См. также [ править ]

Ссылки [ править ]

  1. ^ Колберн, Тимоти; Шут, Гэри (5 июня 2007 г.). «Абстракция в информатике». Разум и машины . 17 (2): 169–184. дои : 10.1007/s11023-007-9061-7 . ISSN   0924-6495 . S2CID   5927969 .
  2. ^ Крамер, Джефф (1 апреля 2007 г.). «Является ли абстракция ключом к вычислениям?». Коммуникации АКМ . 50 (4): 36–42. дои : 10.1145/1232743.1232745 . ISSN   0001-0782 . S2CID   12481509 .
  3. ^ Бен-Ари, Мордехай (1 марта 1998 г.). «Конструктивизм в компьютерном образовании» . Бюллетень ACM SIGCSE . 30 (1): 257, 257–261. дои : 10.1145/274790.274308 . ISSN   0097-8418 .
  4. ^ Лисков, Барбара (1 мая 1988 г.). «Основной доклад – абстракция данных и иерархия». Уведомления ACM SIGPLAN . 23 . АКМ: 17–34. дои : 10.1145/62138.62141 . ISBN  0897912667 . S2CID   14219043 .
  5. ^ Гуттаг, Джон В. (18 января 2013 г.). Введение в вычисления и программирование с использованием Python (изд. весны 2013 г.). Кембридж, Массачусетс: MIT Press. ISBN  9780262519632 .
  6. ^ Флориди, Лучано (сентябрь 2008 г.). «Метод уровней абстракции» . Разум и машины . 18 (3): 303–329. дои : 10.1007/s11023-008-9113-7 . hdl : 2299/2998 . ISSN   0924-6495 . S2CID   7522925 .
  7. ^ Спольски, Джоэл. «Закон дырявых абстракций» .
  8. ^ «Абстрактные методы и классы» . Учебники по Java . Оракул . Проверено 4 сентября 2014 г.
  9. ^ «Использование интерфейса как типа» . Учебники по Java . Оракул . Проверено 4 сентября 2014 г.
  10. ^ Э, Цзянь-Ю; Салданья, Ян Дж.; Каннер, Джозеф; Шмид, Кристофер Х.; Ле, Джимми Т.; Ли, Тяньцзин (2020). «Решение, а не опыт абстракции данных, имеет большее значение для уменьшения ошибок при абстрагировании данных в систематических обзорах». Методы синтеза исследований . 11 (3): 354–362. дои : 10.1002/jrsm.1396 . ISSN   1759-2879 . ПМИД   31955502 . S2CID   210829764 .
  11. ^ Лучано Флориди , Левеллизм и метод абстракции МЭГ – Отчет об исследовании 22.11.04

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: CAA48827A51EE15E6AE64CC7C040F700__1717657260
URL1:https://en.wikipedia.org/wiki/Data_abstraction
Заголовок, (Title) документа по адресу, URL1:
Abstraction (computer science) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)