Идеология языка — различия между версиями

Материал из Deeptown Manual
Перейти к: навигация, поиск
(No offence but if you know such celebrity like Miley you have to know about that video as http://w5billiepiperpornyy.tumblr.com billie piper bush well. This is only my review and no one else's because)
 
(не показаны 157 промежуточных версий 8 участников)
Строка 1: Строка 1:
No offence but if you know such celebrity like Miley you have to know about that video as http://w5billiepiperpornyy.tumblr.com billie piper bush well. This is only my review and no one else's because I have been doing this for like two years in the row and http://a5elishacuthbertnudepa.tumblr.com click here appreciating female celebrities is kind of my job. Does he get paid? First of all, this is what I do as a hobby and I just love when people http://lkbrooklyndeckertopless4u.tumblr.com brooklyn decker hot pics are satisfied with me. I was trying to imagine Gabrielle Anwar naked till her new movies showed up http://gpcareymulligannude6h.tumblr.com http://gpcareymulligannude6h.tumblr.com and there were about couple of sex scenes of her. Has someone ordered Kate Ritchie nude pictures for their pleasure? Well then, http://deslobola1972.inube.com go here let's start this review about her first and then we'll get back to them. Man, I wish I was in that movie instead of him and http://qwkirstendunstnudeqp.tumblr.com kirsten dunst NACKT thus I would get a chance to be in that sex part with Judie. Her tits look pretty big there too and that's why we should pay http://asiculon1983.inube.com go here a bit attention to them as well. It is early in the morning and we can see Sara Jean Underwood naked but covered only in http://anolovcyc1971.inube.com nathalie kelley fakes those headscarf things in her private areas. What an incredible event to have a chance checking out Rachel McAdams boobs because that part of her http://deslobola1972.inube.com jennifer lopez porn body is my favorite. Don't get too much excited as those shots of Kelly Osbourne naked are simply, one hundred percent fake ones however she does have a few shots of her http://pnirinashayknakedni.tumblr.com irina shayk hot pics pussy exposed or some nip slip shots that you can also search on this website if you're careful. Suzy started to behave herself very badly and it seemed that she was up http://tinamechan1972.inube.com audrina patridge nipple slip high. When some cutie blondy was on the http://ollichondbubb1977.inube.com heather morris boobs screen I was coming to it right away and pointing my finger to her.
+
== Немного теории о языках программирования  ==
 +
 
 +
В этой главе мы кратко рассмотрим основные понятия, касающиеся языков программирования, а также попробуем классифицировать язык К++ с позиции этих понятий.
 +
 
 +
Любой язык программирования создается для решения определенного круга задач. Не существует языка, который бы позволял одинаково удобно решать задачи любого характера. Языки программирования различают по многим критериям, делят на большое количество классов и т. д. Мы же рассмотрим такой вопрос как идеологические особенности языка. Здесь, под идеологией языка понимаются некоторые конкретные подходы к отдельным вопросам, например к используемым парадигмам программирования, принципам организации памяти, отношению к исключениям и т. д.
 +
 
 +
== Компиляторы и интерпретаторы ==
 +
 
 +
Все языки программирования можно условно разделить на два класса: компилируемые и интерпретируемые.  
 +
 
 +
''Компилируемые языки программирования'' — это такие языки, для обработки которых используются ''компиляторы''. Они преобразуют исходный код программы в машинный код, понятный конкретному процессору и способный выполняться на нем непосредственно. К достоинствам такого подхода можно отнести то, что программа, написанная целиком на машинном коде, имеет высокую производительность. Недостатком является то, что скомпилированная программа ориентирована на конкретную архитектуру и на конкретный процессор. В результате, программа, собранная для одного процессора не будет работать на другом.
 +
 
 +
''Интерпретируемые языки программирования'' — языки, для обработки которых используются ''интерпретаторы'', которые (в противовес компиляторам) не производят преобразования программы в машинные коды, а исполняют ее непосредственно. Конечно, производительность интерпретаторов заметно меньше, однако для выполнения, программу не требуется компилировать — она будет работать на любой платформе, где есть реализация ее интерпретатора.  
 +
 
 +
Условным это разделение было названо потому, что граница между компиляторами и интерпретаторами очень прозрачная. Практически любой компилируемый язык можно интерпретировать, в то же время многие современные интерпретаторы для повышения быстродействия производят т. н. "компиляцию на лету", при которой исходный текст программы преобразуется в абстрактный набор инструкций или байт код, который уже выполняется.
 +
 
 +
Язык К++ как раз относится к такой промежуточной категории языков. В результате компилирования исходного текста программы на языке К++ получается байт код модуля, который уже может быть выполнен на виртуальной машине gide. Байт код является платформенно независимым, что позволяет исполнять его на любой платформе, где существует реализация виртуальной машины.
 +
 
 +
== Парадигменность  ==
 +
 
 +
[http://ru.wikipedia.org Википедия] дает следующее определение понятия парадигма программирования:
 +
 
 +
«''Парадигма программирования — это [http://ru.wikipedia.org/wiki/Парадигма парадигма], определяющая стиль программирования, иначе говоря — некоторый цельный набор идей и рекомендаций, определяющих стиль написания программ. Парадигма программирования представляет (и определяет) то, как программист видит выполнение программы. Например, в объектно-ориентированном программировании, программист рассматривает программу как набор взаимодействующих объектов, тогда как в функциональном программировании программа представляется в виде цепочки вычисления функций''».
 +
 
 +
В общем смысле, под ''парадигмой'' можно понимать некоторый набор концепций, которые применяются при построении программы. Языки, которые позволяют писать программы в рамках нескольких парадигм, называются ''мультипарадигменными''. Например, язык К++ позволяет писать программы в структурном (совокупность функций, вызывающих друг друга), объектно-ориентированном (построение объектной модели) и смешанном (объединение обоих подходов) стилях. Следовательно, К++ тоже может служить примером '''мультипарадигменного''' языка.
 +
 
 +
Говоря о парадигмах, нельзя не упомянуть подлинно объектно-ориентированную природу языка К++, которая достигается уже на уровне виртуальной машины. В отличие от C++, где объектная модель является всего лишь "надстройкой" над структурной основой, язык К++, подобно Ruby и его предтечи — языку Smalltalk, придерживается принципа "все есть объект". Это значит, что все элементы языка являются объектами. Встроенные типы данных отсутствуют, вместо них применяются классы из [[Стандартная библиотека gide|стандартной библиотеки]] языка. Это позволяет добиться удивительной гибкости при проектировании программ, вплоть до того, что программист может видоизменять даже стандартные классы, расширяя их и добавляя в них собственный функционал.
 +
 
 +
'''Примечание:''' Более подробно, о расширениях можно почитать в кратком [[Введение, или краткий обзор#Расширение классов|обзоре]], либо в главе [[K++ как объектно-ориентированный язык#Расширения|K++ как объектно-ориентированный язык]].
 +
 
 +
== Понятие о типизации ==
 +
 
 +
Если говорить кратко, то под типизацией понимаются принципы организации переменных в языке. Различают ''статическую типизацию'', при которой каждой переменной ставится в соответствие ее тип, который не может быть изменен в процессе выполнения программы, и ''динамическую типизацию'', где переменные меняют свой тип от случая к случаю. К++ вводит понятие ''полудинамической типизации'', которая сочетает в себе преимущества обоих подходов и позволяет взять лучшие стороны каждого из них.
 +
 
 +
'''Примечание:''' Более подробно понятие типизации рассмотрено в главе [[Переменные]].
 +
 
 +
== Управление памятью ==
 +
 
 +
Различные языки подразумевают разные способы управления памятью. Некоторые языки, например, такие как Си, предоставляют программисту прямой доступ к памяти, при этом программист сам должен следить за тем, чтобы память выделялась по мере обращения к ней и, самое главное, своевременно освобождалась после использования.
 +
 
 +
Другие же языки, предоставляют программисту лишь тот уровень абстракции, на который они рассчитаны, при том, что вся работа по управлению памятью ложится на сам язык. Это уберегает программиста от проблем и ошибок, связанных с неправильной работой с памятью. Например, язык Java не предполагает прямого доступа к памяти виртуальной машины. Взамен, он предоставляет наборы классов, которые должны обеспечить программиста всеми необходимыми инструментами.
 +
 
 +
Подобно Java, язык К++ так же не предполагает прямого доступа к памяти. В терминах языка программист описывает свои требования к хранилищу данных, не заботясь о том, как нужно выделять память и когда ее освобождать.
 +
 
 +
== Понятие исключения ==
 +
 
 +
С развитием вычислительной техники и усложнения программ возникла проблема стабильности программ. Традиционный подход, при котором функция возвращает код ошибки, превратил разработку программного обеспечения в настоящий ад, при том, что буквально каждый вызов функции приходилось оборачивать в соответствующее условие проверки кода ошибки. В некоторых областях это все же оправданно (например, ядро Диптауна с успехом применяет этот механизм в совокупности со стеком ошибок). В других областях, таких как сфера прикладного ПО такой подход менее востребован, поскольку там приводятся жесткие требования к скорости написания программ и к их качеству.
 +
 
 +
В результате, возникла концепция исключительных ситуаций или ''исключений''. ''Механизм исключений'', — это концепция, позволяющая повысить стабильность работы программы путем внесения в нее своеобразных "контрольных точек". Если в процессе работы программы происходит непредвиденная ситуация, например, такая как ошибка ввода-вывода или внезапное прекращение сеанса связи, то код, обнаруживший ошибку, создает специальный объект-исключение и "выбрасывает" его, то есть ''генерирует исключение''. При этом, выполнение программы прерывается и управление передается ближайшей контрольной точке, которая может перехватить это исключение и принять некоторое решение относительно того что делать дальше: например, показать пользователю сообщение об ошибке.
 +
 
 +
Преимущество концепции исключений в том, что программисту не надо проверять каждый вызов на правильность. Он просто пишет код, предполагая что "все идет как надо". Лишь в некоторых местах, где заранее предусматривается возможность возникновения ошибки, вставляются те самые опорные точки — перехватчики исключений. Если же ошибка произойдет, то она рано или поздно будет отловлена.

Текущая версия на 14:37, 13 июля 2013

Содержание

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

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

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

[править] Компиляторы и интерпретаторы

Все языки программирования можно условно разделить на два класса: компилируемые и интерпретируемые.

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

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

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

Язык К++ как раз относится к такой промежуточной категории языков. В результате компилирования исходного текста программы на языке К++ получается байт код модуля, который уже может быть выполнен на виртуальной машине gide. Байт код является платформенно независимым, что позволяет исполнять его на любой платформе, где существует реализация виртуальной машины.

[править] Парадигменность

Википедия дает следующее определение понятия парадигма программирования:

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

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

Говоря о парадигмах, нельзя не упомянуть подлинно объектно-ориентированную природу языка К++, которая достигается уже на уровне виртуальной машины. В отличие от C++, где объектная модель является всего лишь "надстройкой" над структурной основой, язык К++, подобно Ruby и его предтечи — языку Smalltalk, придерживается принципа "все есть объект". Это значит, что все элементы языка являются объектами. Встроенные типы данных отсутствуют, вместо них применяются классы из стандартной библиотеки языка. Это позволяет добиться удивительной гибкости при проектировании программ, вплоть до того, что программист может видоизменять даже стандартные классы, расширяя их и добавляя в них собственный функционал.

Примечание: Более подробно, о расширениях можно почитать в кратком обзоре, либо в главе K++ как объектно-ориентированный язык.

[править] Понятие о типизации

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

Примечание: Более подробно понятие типизации рассмотрено в главе Переменные.

[править] Управление памятью

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

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

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

[править] Понятие исключения

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

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

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

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты