The 3rd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1-st lecture from the course "Java Core".
Chair of Information Net Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1st part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 3rd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1-st lecture from the course "Java Core".
Chair of Information Net Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2-nd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 2nd part of the 6th lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
The 1st part of the 3rd lecture from the course "Java Core".
The Department of Information and Network Technologies.
St-Petersburg State University Of Aerospace Instrumentation.
Russia
Sergey Teplyakov, .NET Expert, “SOLID Principles in the real world”:
• Why design principles matters?
• SOLID principles in the real world
S – Single Responsibility Principle
O – Open-Closed Principle
L – Liskov Substitution Principle
I – Interface Segregation Principle
D – Dependency Inversion Principle
Доклад Анатолия Левенчука "Системный подход, данный нам в стандартах ISO 42010, ISO 81346, ISO 15926, OMG Essence" на 82 заседании Русского отделения incose, 23 октября 2013
Sergey Teplyakov, .NET Expert, “SOLID Principles in the real world”:
• Why design principles matters?
• SOLID principles in the real world
S – Single Responsibility Principle
O – Open-Closed Principle
L – Liskov Substitution Principle
I – Interface Segregation Principle
D – Dependency Inversion Principle
Доклад Анатолия Левенчука "Системный подход, данный нам в стандартах ISO 42010, ISO 81346, ISO 15926, OMG Essence" на 82 заседании Русского отделения incose, 23 октября 2013
Methods for building dialog agents and the technologies we used Grid Dynamics
Chatbots have now become an integral part of software development, which are closely related to both NLP and ML. The present report highlights the basic concepts and approaches of working with NLP by implementing dialogue agents (Intent classification, NER, Slot Filing), and you can also find out how to build an entire dialog system. No SaaS, only in-house solutions!
Доклад Александра Макарова для Съесть собаку #10: PHP, 12/10/2017.
Тезисы:
- Что такое архитектура сайта и зачем она нужна
- Виноват ли фреймворк в плохой архитектуре
- Где выход из сложности и регрессий
- Что делать со сложным доменом
- Выводы.
Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
Netpeak Group продолжает серию образовательных мероприятий — #NetpeakTalks в Одессе.
В рамках этих встреч у тебя будет возможность обсудить с практикующим спикером наболевшие темы, связанные с R&D, дизайном, менеджментом, интернет-маркетингом, QA, Customer Success, аналитикой и др. (все темы от встречи к встрече не повторяются и отличаются друг от друга).
Тема#3: Масштабируемое приложение на PHP
Краткий план:
1. Теория принципов и паттернов проектирования.
2. Примеры использования принципов и паттернов в коде (разберём какие "плюшки" даёт каждый случай).
3. Важность слабосвязанного кода (IoC).
4. Как "под капотом" работают IOC контейнера.
_____________________
Информацию об этом и следующих мероприятиях ты можешь отследить:
FaceBook: https://www.facebook.com/NetpeakTalks/
Телеграм: https://t.me/netpeaktalks
__________
Плейлист с выступлениями на YouTube: https://www.youtube.com/playlist?list=PL8LIMl0TjrcDtSS_lM5jqH-huK5FCq44A
__________
2. Разработчик должен знать
• Базовые элементы синтаксиса,
процедурное мышление: переменные, if /
циклы / функции
• Указатели и работа с памятью (C)
• ООП (C++) – объектное мышление
• Библиотеки (платформа) и какой-нибудь
язык более высокого уровня (.NET / Java /
Пр.)
4. Суть эволюции
• Борьба со с возрастающей сложностью
• Т.е. человек может оперировать 7 +/- 2
объектами, то использование принципа
«разделяй и властвуй» или декомпозиции
(инкапсуляции) неизбежно.
• По сути, вся эволюция индустрии
разработки заключается в обнаружении
повторяющегося кода и его инкапсуляции в
какие-то удобные конструкции
5. Сначала был ассемблер
• Прямое управление ячейками памяти
процессора (регистрами)
• Прямой вызов процессорных операций
• Очень быстро (быстрее некуда)
• Очень сложно, нужно помнить МАССУ
нюансов, плюс процессоро-зависимо
• Применение: ОС, драйверы, встроенный
софт, игры (чуть-чуть), BIOS …
6. Захотелось абстракций
• Элементарные типы данных
• Переменные, массивы
• Арифметические операторы и логические
операторы
• Условный оператор (if), циклы
• Все это компилятором (ну или
интерпретатором) преобразуется в
ассемблер
8. Cтека мало
• Стек быстр, но ограничен
– вспомним 640 Kb
• Нужно работать с основной памятью
– указатели
– malloc(), free()
– язык C
9. Структуры, глобальные переменные
• Быстро оказалось что некоторые данные
постоянно используются вместе ->
структуры
– Point (x;y)
• Передавать параметры и получать
результаты – недостаточно
– Удобно иметь «состояние» системы доступное
из разных функций - глобальные переменные
10. Процедурное программирование
• Когда программа становится большой, а
глобальных переменных – много, держать в
голове их состояние становится невозможно, а
значит – выполнение функций и отладка
непредсказуемы
• Что бы не путаться – разобьем на модули
(библиотеки)
– область видимости, интерфейс, реализация
– т.е. инкапсуляция ряда функций и глобальных
переменных
12. Класс как эволюция структур
• Было замечено что структуры часто удобно
передавать в методы и образуются группы
методов работающие с одними и теми же
структурами
• Фактически класс – это структура данных
объединенная с методами (функциями) ее
обработки
• Класс – это пользовательский тип данных,
состоящий из полей данных и методов
13. Объект в теории
• С точки зрения восприятия человеком
объектом может быть:
– осязаемый и (или) видимый предмет
– нечто, воспринимаемое мышлением
– нечто, на что направлена мысль или действие.
• Объект может обладать состоянием,
поведением, идентичностью
• Очевидно, что с помощью понятия
«объект» можно описать все что угодно
14. Класс как абстракция
• Структура и поведение схожих объектов
определяет общий для них класс
• Класс это описание множества объектов:
– Структуры данных состояния
– Поведения (методов)
• Термины «экземпляр класса» и «объект»
взаимозаменяемы.
15. Стандартные операции
• Операция – это услуга, которую класс (объект) может
предоставить своим клиентам.
• На практике типичный клиент совершает над объектами
операции пяти видов:
– Модификатор - изменяет состояние
– Селектор – считывает состояние, но не меняет
– Итератор – дает последовательный доступ к частям класса
– Конструктор – создание / инициализация объекта
– Деструктор – уничтожение объекта (освобождение памяти)
• В различных языках могут быть представлены
специальными синтаксическими конструкциями
16. Инкапсуляция
• Основная идея объекта заключается в том,
что он скрывает от взаимодействующих с
ним принципы своего устройства, оставляя
для клиентов только интерфейс.
• Это и называется инкапсуляция
• Инкапсуляция в языках программирования
реализуется с помощью областей
видимости:
– Основные: public, private, protected
17. Наследование
• Иногда еще называют генерализацией или
расширением, что часто путает
• Наследование выражает отношение
классов (объектов) «является» («Is а»)
• Примеры наследования
– Квадрат – наследник фигуры или?
18. Полиморфизм
• Возможность объектов с одинаковой
спецификацией иметь различную реализацию
• Один интерфейс, множество реализаций
• Язык программирования поддерживает
полиморфизм, если классы с одинаковой
спецификацией могут иметь различную
реализацию — например, реализация класса
может быть изменена в
процессе наследования
• Наиболее частая реализация – виртуальный
метод
19. ООП
• Таким образом, в ООП система
моделируется как совокупность классов, их
интерфейсов и заданных отношений
наследования и композиции между ними.
• Поведение системы – как
последовательность создания и
взаимодействия и уничтожения объектов
(экземпляров классов).
21. Наследование vs композиция
• Использование объекта нужного класса в качестве
поля другого класса позволяет, так же как и
наследование, добиться доступа к данным и
методам этого класса инкапсулируя суть
взаимодействия
– Если они не protected
• Наследование нарушает инкапсуляцию
• Наследование дает полиморфизм
• Поэтому: используйте наследование только когда
вам нужен полиморфизм и обязательно, когда
есть отношение «является»
22. Качество абстракции
• Зацепление
– степень глубины связей между отдельными классами
• Связность
– Насколько члены класса приследуют единую и
неделимую цель
• Достаточность, полнота, примитивность
– Степень пригодности к использованию в изоляции
– Насколько полно выражает все аспекты абстракции
– Абстракция должна содержать только примитивные
операции (то что может быть реализовано с помощью
них – часто является лишним). Абстракция должна
инкапсулировать нетривиальные знания.
25. Диаграммы последовательности
Owner Dog Head
1: fass()
2: bite()
3: openMouth()
4: bite()
5: closeMouth()
• Время жизни
• Кто кого зовет (можно показывать рез-т)
• Циклы, условия, асинхронность – тоже есть
26. Другое
• Методы доступа (свойства / getters / setters)
• Множественное наследование
• Абстрактные члены
• Интерфейсы как языковая конструкция
• Вложенные классы
• Прототипы, метаклассы
(метапрограммирование)
27. Модуль (полусеместровый)
• Кто уже показал – 45, кто тут – 35, кого нет –
25.
• Кто показывал лягушку на андроиде – 44.
• Теперь, что бы получить 45-54, мало
показать что-то, что вы делали раньше.
Нужно выполнить какое-нибудь задание.
28. Ресурсы
• Хороших книг по концепциям ООП я не знаю
• Объектно-ориентированный анализ и
проектирование с примерами приложений
• Применение UML 2.0 и шаблонов
проектирования. Введение в объектно-
ориентированный анализ, проектирование и
итеративную разработку
• UML, основы
• Wikipedia
29. Темы для докладов
• AOP
• Kanban / Lean (Карпов)
• SCRUM: Team / ScrumMaster – подробнее
про процесс (DS, Retro, SprintPlan, Demo…)
• Portfolio management, BMG (Alex Ostervald),
Scrum of Scrum
• NoSql БД
• Реализация ООП в Javascript (прототипы)
30. Лабы
• Открытые данные
– http://www.apps4russia.ru/, http://apps4russia.reformal.ru/,
http://data.worldbank.org/
• Готовое:
– http://minenergo.gov.ru/activity/statistic/,http://www.fms.gov.ru/abo
ut/ofstat/, http://www.federalspace.ru/main.php?id=10,
http://ivan.begtin.name/2011/10/02/gosuslugijson/
• Повышенный балл:
– Или наличие БД
– Или наличие веб интерфейса
– Индивидуальное задание (для тех, у кого уже есть что показать)
• Стажировка (Тестер / Разработчик)
– MS: C#, MS MVC, MS SQL Server