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

Материал из Deeptown Manual
Перейти к: навигация, поиск
(Speaking English would not be a proper thing to do as she might not http://corconolow1976.inube.com rosie huntington-whiteley sex tape speak it quite well. And finally, you will see Maria Tornberg top)
 
(не показаны 47 промежуточных версий 8 участников)
Строка 1: Строка 1:
Speaking English would not be a proper thing to do as she might not http://corconolow1976.inube.com rosie huntington-whiteley sex tape speak it quite well. And finally, you will see Maria Tornberg topless right next to that guy http://tenscimamse1975.inube.com salma hayek nake photos and having her arms on his shoulders. We know that nobody in the whole world would fit http://89laurengrahamnudes3.tumblr.com lauren graham NACKT better for this role so you shouldn't be afraid of that, Emma. Such things make me cumm a lot faster and http://peitrosiced1983.inube.com lisa ann pussy when you can fast you feel a lot more joy than when you do it longer. But for now, let's checkout her sexy video and just enjoy because I am sure that's exactly why you came http://fonckamati1982.inube.com mariah carey bushh here for. By that I mean you can either http://amdmasthela1979.inube.com jaime pressly hot pics masturbate or just seat and stare for it for another hour. She is wearing sun glasses and smiles not knowing she has just flashed million people http://d4jenniferlopezfakes1z.tumblr.com jennifer lopez naked pics with a part of her left boob. My new pig out food is Indian food First, I don't think the phrase pig out fits to our cutie pie as she is so thin and http://2qlaurenhollynudeaz.tumblr.com go here elegant. Honestly, I don't know how tall she really is but when I see some photos of Taylor Swift naked I start assuming she is not less than 5'7 which is totally enough for http://canswordvecho1974.inube.com http://canswordvecho1974.inube.com becoming a model. So, anyway, I think you can discuss the fact http://4qkatyperrydesnudauc.tumblr.com katy perry porn that Kate and Ashley Judd has the same birthday on April 19. A lot of you should thank me for giving http://ahbrookehogannudeq6.tumblr.com brooke hogan naked pictures a chance to see those photos that you have checked and to know some pretty rare information about Jenna. But I still know that there are also those of you http://lanfagemen1971.inube.com salma hayek nipple slip that like some classic stuff and they understand that.
+
== Немного теории о языках программирования  ==
 +
 
 +
В этой главе мы кратко рассмотрим основные понятия, касающиеся языков программирования, а также попробуем классифицировать язык К++ с позиции этих понятий.
 +
 
 +
Любой язык программирования создается для решения определенного круга задач. Не существует языка, который бы позволял одинаково удобно решать задачи любого характера. Языки программирования различают по многим критериям, делят на большое количество классов и т. д. Мы же рассмотрим такой вопрос как идеологические особенности языка. Здесь, под идеологией языка понимаются некоторые конкретные подходы к отдельным вопросам, например к используемым парадигмам программирования, принципам организации памяти, отношению к исключениям и т. д.
 +
 
 +
== Компиляторы и интерпретаторы ==
 +
 
 +
Все языки программирования можно условно разделить на два класса: компилируемые и интерпретируемые.
 +
 
 +
''Компилируемые языки программирования'' — это такие языки, для обработки которых используются ''компиляторы''. Они преобразуют исходный код программы в машинный код, понятный конкретному процессору и способный выполняться на нем непосредственно. К достоинствам такого подхода можно отнести то, что программа, написанная целиком на машинном коде, имеет высокую производительность. Недостатком является то, что скомпилированная программа ориентирована на конкретную архитектуру и на конкретный процессор. В результате, программа, собранная для одного процессора не будет работать на другом.
 +
 
 +
''Интерпретируемые языки программирования'' — языки, для обработки которых используются ''интерпретаторы'', которые (в противовес компиляторам) не производят преобразования программы в машинные коды, а исполняют ее непосредственно. Конечно, производительность интерпретаторов заметно меньше, однако для выполнения, программу не требуется компилировать — она будет работать на любой платформе, где есть реализация ее интерпретатора.
 +
 
 +
Условным это разделение было названо потому, что граница между компиляторами и интерпретаторами очень прозрачная. Практически любой компилируемый язык можно интерпретировать, в то же время многие современные интерпретаторы для повышения быстродействия производят т. н. "компиляцию на лету", при которой исходный текст программы преобразуется в абстрактный набор инструкций или байт код, который уже выполняется.
 +
 
 +
Язык К++ как раз относится к такой промежуточной категории языков. В результате компилирования исходного текста программы на языке К++ получается байт код модуля, который уже может быть выполнен на виртуальной машине 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, язык К++ так же не предполагает прямого доступа к памяти. В терминах языка программист описывает свои требования к хранилищу данных, не заботясь о том, как нужно выделять память и когда ее освобождать.

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

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

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

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

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

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