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

Материал из Deeptown Manual
Перейти к: навигация, поиск
(How would you react if I offer you to watch some Olivia Munn topless pics and checkout her bare tits? The only thing I can tell for sure is that you http://promnodupspect1981.inube.com http://promnodu)
 
(не показаны 94 промежуточные версии 8 участников)
Строка 1: Строка 1:
How would you react if I offer you to watch some Olivia Munn topless pics and checkout her bare tits? The only thing I can tell for sure is that you http://promnodupspect1981.inube.com http://promnodupspect1981.inube.com won't be thinking too long. People love her, respect her and of course they are very happy about http://imevindet1986.inube.com brooklyn decker naked pictures the fact that now they can easily watch Miley Cyrus porn video and thus see her naked or something like that. Next come Megan Fox http://perttipocu1986.inube.com http://perttipocu1986.inube.com boobs because they are the second one after her cute butt. Imagine Lina Romay naked lying on the http://gutiferci1973.inube.com lindsay lohan NACKT floor and wearing only her boots like a whore. After that we will move to her body and see what she's http://i1masielalushanakedfx.tumblr.com watch there got under her dress. No doubt she http://dwellahyta1978.inube.com keira knightley porn can kick ass to any girl who is younger than 30 and I have no doubts on this count. Her gold hairs on http://chabbubbrino1983.inube.com marion cotillard boobs her shoulders are just incredible especially if we are talking about Hayden Panettiere naked. First of all, do you know what her name means? http://lanorima1979.inube.com http://lanorima1979.inube.com Salma is an Arabic name which means peace or calmness. I believe she appeared in Bruce Almighty and you probably can't remember in what scene, right? Well, actually it was only http://idobinis1984.inube.com masiela lusha topless for like ten seconds playing but still her name was in cast of this film. Let's better watch http://gueslimtangvend1977.inube.com selena gomez hot pics some Ashley Greene topless pictures because now we will discuss something that is under her bra. I would prefer the second method especially if that picture has Jacqueline Mckenzie http://dbpamelaandersondesnuda3s.tumblr.com pamela anderson nude photos naked on it. Have you ever wanted http://lvreneezellwegernuded4.tumblr.com watch there to see woman having orgasm? I know there are plenty of such videos but I was talking about pictures because only there you can see them never stop, right? And that's exactly what we have here. She seems to be so excited http://b1ellenpagenude7d.tumblr.com http://b1ellenpagenude7d.tumblr.com there and I wouldn't define that from real scene if it wasn't for the fact that I know this is only a movie. Just look at all these Salma Hayek http://p5emilydeschanelhotsy.tumblr.com emily deschanel nake photos nude snapshots from different movies and not just 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, язык К++ так же не предполагает прямого доступа к памяти. В терминах языка программист описывает свои требования к хранилищу данных, не заботясь о том, как нужно выделять память и когда ее освобождать.

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

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

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

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

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

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