Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
Доклад о редких нестандартных расширениях языка С++, про которые никто не знает, но которые надо поддерживать в анализаторе кода.
О магии Visual C++ с файлом stdafx.h, когда проект компилируется, хотя не должен. О том как зародился viva64 (предшественник PVS-Studio) для поиска 64-битных проблем. Как и почему исчез анализ кода, который одно время существовал в компиляторе Intel C++.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
Доклад о редких нестандартных расширениях языка С++, про которые никто не знает, но которые надо поддерживать в анализаторе кода.
О магии Visual C++ с файлом stdafx.h, когда проект компилируется, хотя не должен. О том как зародился viva64 (предшественник PVS-Studio) для поиска 64-битных проблем. Как и почему исчез анализ кода, который одно время существовал в компиляторе Intel C++.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
Алексей Куканов, Intel.
Последняя версия стандарта С++ добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. Однако это лишь необходимая низкоуровневая база для внедрения параллелизма. Эффективная разработка параллельных программ требует высокоуровневого API, реализующего типичные шаблоны использования параллелизма в виде, пригодном для применения в широком спектре алгоритмов и приложений. В докладе речь пойдёт о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
TypeScript – светлое будущее ES6 уже вчера.
Почему не "Кофе"? Чай полезней.
Что не так с Flow от Facebook?
Реальная практика использования: плюсы и минусы.
Не VisualStudio единым. Особенности работы в других IDE.
Интеграция с уже существующим JS кодом.
Использование совместно с RequireJS. Подводные камни.
Использование TypeScript совместно с React.
TypeScript и Angular.
Плюшки, которых нет в ES6/7 (пока нет): [static] enum, интерфейсы, private, protected, декораторы... Что дают и зачем?
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Yandex
Алексей Куканов, Intel.
Последняя версия стандарта С++ добавляет в язык и библиотеку поддержки средства для использования потоков исполнения (threads) и синхронизации между ними. Однако это лишь необходимая низкоуровневая база для внедрения параллелизма. Эффективная разработка параллельных программ требует высокоуровневого API, реализующего типичные шаблоны использования параллелизма в виде, пригодном для применения в широком спектре алгоритмов и приложений. В докладе речь пойдёт о наиболее часто встречающихся параллельных шаблонах, реализованных в программных моделях Intel® Threading Building Blocks и Intel® Cilk Plus, и о примерах их использования.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
TypeScript – светлое будущее ES6 уже вчера.
Почему не "Кофе"? Чай полезней.
Что не так с Flow от Facebook?
Реальная практика использования: плюсы и минусы.
Не VisualStudio единым. Особенности работы в других IDE.
Интеграция с уже существующим JS кодом.
Использование совместно с RequireJS. Подводные камни.
Использование TypeScript совместно с React.
TypeScript и Angular.
Плюшки, которых нет в ES6/7 (пока нет): [static] enum, интерфейсы, private, protected, декораторы... Что дают и зачем?
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Factors explaining the innefficient valuation of intangiblesaccounting2010
The document discusses the inefficient valuation of intangible assets in capital markets and the problems that result. It identifies three main causes of inefficient valuation: 1) The quality of financial information provided does not adequately disclose information about intangible assets. 2) Market imperfections like information asymmetry allow insider gains. 3) Financial analysts have limitations that can lead to biases in their earnings forecasts, like cognitive biases, incentives, and time constraints. The document suggests improved disclosure requirements and market regulations could help address these issues.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
2. В программе
• Objective C
• Foundation and Memory Management
• Views and View Controllers
• Interface builder
• Networking
• Web services, JSON
• ...
5. Кратко
• Основные особенности языка
• Объявления и определения классов
• Инициализация и деинициализация
• Управление памятью
• Properties
• Стандартные классы
• Стиль форматирования и именование
• Практика: простенькое приложеньеце
12. Расширение C
• Можно использовать базовые типы,
массивы и структуры
• Можно вызывать функции
• Можно работать с указателями
• ...
13. Совместимость с C++
• Objective C класс может ссылаться на
C++ и наоборот
• В теле методов можно вызывать методы
как Objective C классов, так и C++
• Objective C классы могут быть
использованы в качестве аргументов
шаблонов
15. Классы и объекты
• NSObject *obj
• NSString *str, NSArray *arr, UIView *view
16. Динамическая
типизация
• Динамическое связывание
• id
• При невозможности проверить наличие
метода - предупреждение, а не ошибка
• Сообщения
• Возможность интроспекции
19. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
}
@end }
20. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
}
@end }
21. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
}
@end }
22. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
@end }
23. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
@end }
24. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
- (void)print:(NSString *)a b:(int)b; public void print(String a, int b) {
};
@end }
25. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
- (void)print:(NSString *)a b:(int)b; public void print(String a, int b) {
};
@end }
26. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
- (void)print:(NSString *)a b:(int)b; public void print(String a, int b) {
};
@end }
27. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
- (void)print:(NSString *)a b:(int)b; public void print(String a, int b) {
};
@end }
28. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
- (void)print:(NSString *)a b:(int)b; public void print(String a, int b) {
};
@end }
29. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
- (void)print:(NSString *)a b:(int)b; public void print(String a, int b) {
};
@end }
30. Объявление
Objective C Java
@interface Printer : Staff { class Printer extends Staff{
int pages; int pages;
}
- (void)print:(NSString *)a b:(int)b; public void print(String a, int b) {
};
@end }
35. Объявление
Тип возвращаемого
Тип аргумента Тип аргумента
значения
- (void)print:(NSString *)a b:(int)b;
Non-static Имя функции
метод print:b:
36. Объявление
Тип возвращаемого
Тип аргумента Тип аргумента
значения
- (void)print:(NSString *)a b:(int)b;
Non-static Имя функции Имена
метод print:b: аргументов
78. Properties (dot notation)
NSArray *itemsList = order.itemsList;
order.itemsList = itemsList;
Вызывает
[order itemsList];
Появилось в
Objective C 2.0
79. Properties (dot notation)
NSArray *itemsList = order.itemsList;
order.itemsList = itemsList;
Вызывает
[order itemsList];
Вызывает
[order setItemsList];
Появилось в
Objective C 2.0
100. Стиль форматирования
@interface NSString : NSObject {
}
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
@end
Звездочка рядом с
Пробел только здесь переменной, а не с типом, как
принято в C/C++
102. Стиль форматирования
Пробел только здесь
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc {
if (member != nil) {
for (NSNumber *num in array) {
[num stringValue];
}
}
}
103. Стиль форматирования
Открывающая скобка на
Пробел только здесь
той же строке
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc {
if (member != nil) {
for (NSNumber *num in array) {
[num stringValue];
}
}
}
104. Стиль форматирования
Открывающая скобка на
Пробел только здесь
той же строке
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc {
if (member != nil) {
for (NSNumber *num in array) {
[num stringValue];
}
} В именах функций и
переменных camel-case
}
105. Стиль форматирования
Открывающая скобка на
Пробел только здесь
той же строке
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc {
if (member != nil) {
for (NSNumber *num in array) {
[num stringValue]; Приняты длинные имена
}
} В именах функций и
переменных camel-case
}
107. Кратко
• Основные особенности языка
• Объявления и определения классов
• Инициализация и деинициализация
• Управление памятью
• Properties
• Стандартные классы
• Стиль форматирования и именование
• Практика: простенькое приложеньеце
117. Вызываемый класс
Селекторы
OrderProcessor.h
@interface OrderProcessor : NSObject {
id target;
SEL callback;
}
- (void)processData:(NSData *)data
target:(id)target
selector:(SEL)selector;
@end
118. Вызываемый класс
Селекторы
OrderProcessor.h
@interface OrderProcessor : NSObject {
id target;
SEL callback;
} Объявление типа
селектора
- (void)processData:(NSData *)data
target:(id)target
selector:(SEL)selector;
@end
119. Вызываемый класс
Селекторы
OrderProcessor.h
@interface OrderProcessor : NSObject {
id target;
SEL callback;
} Объявление типа
селектора
Функция обработки
- (void)processData:(NSData *)data принимает ссылку на
target:(id)target объект ...
selector:(SEL)selector;
@end
120. Вызываемый класс
Селекторы
OrderProcessor.h
@interface OrderProcessor : NSObject {
id target;
SEL callback;
} Объявление типа
селектора
Функция обработки
- (void)processData:(NSData *)data принимает ссылку на
target:(id)target объект ...
selector:(SEL)selector;
... и на селектор
@end
123. Вызывающий класс Селекторы
OrderProcessorClient.m
Передает себя в
качестве объекта
- (void)f {
[orderProcessor processData:data target:self
selector:@selector(orderProcessed:)];
}
- (void)orderProcessed:(id)source {
...
}
124. Вызывающий класс Селекторы
OrderProcessorClient.m
Передает себя в
качестве объекта
- (void)f {
[orderProcessor processData:data target:self
selector:@selector(orderProcessed:)];
} и селектор на метод
orderProcessed
- (void)orderProcessed:(id)source {
...
}
125. Вызывающий класс Селекторы
OrderProcessorClient.m
Передает себя в
качестве объекта
- (void)f {
[orderProcessor processData:data target:self
selector:@selector(orderProcessed:)];
} и селектор на метод
orderProcessed
- (void)orderProcessed:(id)source {
... Важно! Помним про
составные имена методов
}
128. Вызывемый класс
Селекторы
OrderProcessor.m
- (void)processData:(NSData *)data
target:(id)aTarget
selector:(SEL)aSelector {
target = aTarget;
Можно при необходимости
selector = aSelector; сохранить ссылки
...
[target performSelector:selector];
}
129. Вызывемый класс
Селекторы
OrderProcessor.m
- (void)processData:(NSData *)data
target:(id)aTarget
selector:(SEL)aSelector {
target = aTarget;
Можно при необходимости
selector = aSelector; сохранить ссылки
...
[target performSelector:selector];
}
Использует метод
performSelector для вызова
134. Ключевое слово
Протоколы
@protocol
Объявляет только
методы, скобок нет
@protocol OrderProcessorDelegate
- (void)orderProcessed;
@optional
- (void)orderProcessedWithError:(NSError *)err;
@end
135. Ключевое слово
Протоколы
@protocol
Объявляет только
методы, скобок нет
@protocol OrderProcessorDelegate
- (void)orderProcessed;
Можно указать
опциональные методы
@optional
- (void)orderProcessedWithError:(NSError *)err;
@end
137. Протоколы
OrderProcessorClient.h Поддержка протокола
указывается в <скобках>
@interface OrderProcessorClient :
NSObject<OrderProcessorDelegate> {
}
...
@end
138. Протоколы
OrderProcessorClient.h Поддержка протокола
указывается в <скобках>
@interface OrderProcessorClient :
NSObject<OrderProcessorDelegate> {
}
...
@end Методы повторно объявлять
не нужно