Языки программирования Дмитрий Сошников
Как устроен компьютер? Центральный процессор Программа Данные Память Жесткий диск
Первый язык программирования высокого уровня – ФОРТРАН – был создан Дж.Бэкусом, чтобы математики могли программировать на уровне формул программирование переключателей машинные коды язык ассемблера FORTRAN г., Дж.Бэкус A 12 1F 4B C3 E0 EE F C3 1D F2 00 0C 0D 0010 … MOVAX, [ARG1] ADDAX, [ARG2] MOV[RES], AX JMPNEXT ARG1:DB10 ARG2:DB20 RES:DB0 NEXT:… S = 0 DO 10 I=1,10 S = S + I*I 10CONTINUE История языков программирования: начало
Императивные (алгоритмические) языки программирования Программы состоят из операторов Операторы «что-то делают»: изменяют состояние памяти Состояние памяти определяется переменными float a = 1, b = 2, c = -5; var d = b * b - 4 * a * c; var x1 = (-b + Math.Sqrt(d)) / 2 / a; var x2 = (-b - Math.Sqrt(d)) / 2 / a; Console.WriteLine(x1); Console.WriteLine(x2);
Императивные языки программирования программирование переключателей машинные коды язык ассемблера FORTRAN LISP С, Pascal С++ Java C# Python
Объектно-ориентированные языки Необходимо как-то структурировать код Мир состоит из объектов и классов объектов, со своими свойствами Более «конкретные» объекты наследуют свойства более абстрактных Ключевые свойства: – Инкапсуляция – Наследование – Полиморфизм (абстракция)
Основной язык – C# using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { float a = 1, b = 2, c = -5; var d = b * b - 4 * a * c; var x1 = (-b + Math.Sqrt(d)) / 2 / a; var x2 = (-b - Math.Sqrt(d)) / 2 / a; Console.WriteLine(x1); Console.WriteLine(x2); Console.ReadKey(); }
Функциональные языки Иногда удобно представлять себе процесс обработки данных как применение некоторой функции к этим данным В этом случае нет понятия памяти – данные подаются на вход функциям и получаются на выходе Возможность передавать функции другим функциям как данные даёт богатые возможности по комбинированию функций для достижения нужного результата let solve a b c = let d = b*b-4.0*a*c (-b+sqrt(d))/2./a, (-b-sqrt(d))/2./a solve
Эволюция языков программирования программирование переключателей машинные коды язык ассемблера FORTRAN FP LISP С, Pascal С++ Java C# Haskell Prolog Mercury F# OCaml ML Miranda Python
Платформа.NET Операционная система Аппаратура компьютера (процессор, память, …) Платформа Microsoft.NET Исполнитель byte-code Библиотека C# Visual Basic.NET F# Managed C++ … …
Когда нужны разные языки? ЗадачаЯзык программирования Встраиваемые системы, системы реального времени С, С++ Операционные системыС, С++ Корпоративные системыC# (+SQL) Веб-сайты, порталыC# (+HTML) Обработка данных, компиляторыF#, C# Игры (для Windows, XBox)C#, C++ Приложения для телефона (XNA)C# Богатые приложения для Интернет (RIA, Silverlight) C# (+XAML)
Другие компьютерные языки Разметка текста (HTML, XAML, CSS, …) Представление данных (XML) Запросы к данным (SQL) …
Разметка текста - HTML Привет! Это пример разметки в HTML
Представление данных - XQuery: //publications
Запросы к данным - SQL IDName 1Dmitri Soshnikov 2Peter Pen IDPerson_IDTitle 11Programming Languages 21Programming in C# People Publications SELECT People.Name, Publications.Title FROM People, Publications WHERE People.ID = Publications.Person_ID SELECT People.PName, (SELECT COUNT(*) FROM Publications WHERE Publications.Person_ID=People.ID) AS Count FROM People
Thank.You! Дмитрий Сошников