«Змейка» с хорошим аппетитом

Вы освоите самую распространенную и востребованную парадигму, используемую практически во всех современных языках — объектно ориентированное программирование. Для себя я выбрал ознакомительный курс для освоения принципов объектно-ориентированного программирования, который построен на создании рабочего проекта на языке С# — консольной игры «Змейка».

Здравствуйте! Вас приветствует редакция сайта GeekBrains.ru, сервиса онлайн-обучения программированию. Мы решили завести блог на Хабре! Уверены, что ещё успеем рассказать и обсудить много интересного из мира программирования, ИТ и онлайн-образования. Но начнём очень просто, без особых прелюдий, с обзора бесплатного курса по основам C# и ООП от одного из наших учеников. Пара слов о слушателе: менеджер IT-проекта, знаком с процедурным программированием, web-разработкой, SQL. Более тесное знакомство с ООП понадобилось для глубокого внедрения в бизнес-процессы.

Основные понятия ООП

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

Слоган курса гласит «Сложная концепция простыми словами». Именно в Visual Studio можно познакомиться с редактором исходного кода, дизайнером классов, отладчиком и консолью. На третьей лекции я познакомился с понятием класса, типа данных. Так я столкнулся с первым из трёх принципов ООП — инкапсуляцией. Инкапсуляция — это свойство системы, позволяющее объединять данные и методы, работающие с ними, в классе и скрыть все детали реализации от пользователя.

После этого начинается работа с новым классом стандартной библиотеки C# List (список), в котором создаются функции добавления и удаления элемента, а также возникает цикл foreach. Работая с циклом в отладчике, слушатель ещё более наглядно понимает структуру и последовательность работы программы. Наследование — это свойство системы, позволяющее описывать новый класс на основе уже существующего с частично или полностью замещающейся функциональностью.

И вот змейка должна научиться двигаться в поле и управляться стрелками с клавиатуры. Задача кажется сложной, но я помнил, что речь идёт всё ещё о консоли и поэтому реализация передвижения змейки должна быть максимально простой.

Важно не то, что класс имеет методы, а то, что эти методы выполняют определённые действия над данными класса (и не только)

На последнем занятии змейка стала вполне самостоятельной, а я учился обрабатывать столкновения с препятствиями и собственным хвостом змейки. Private — это закрытые данные и код внутри объекта, public — открытые.

Если говорить о курсе в целом, то он мне помог — изменились и качество моей работы, и уровень общения с разработчиками. Я точно вернусь послушать другие курсы и пообщаться с профессионалами. Например, разные классы и связи между ними. Вопрос не в паттернах, а глубже).

Вот с этим согласен на 100%. По большому счёту, в рамках курса по архитектуре именно «практика — критерий истины»

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

Закрытые данные и код доступны только из другой части этого же объекта, то есть извне к ним обратиться нельзя

Или, например, в Java не всё есть объект, а в питоне даже класс является объектом, и можно с помощью метаклассов создавать классы (или изменять поведение классов) в рантайме. Для полноценной работы с домашними заданиями и проверкой их преподавателем у нас есть онлайн-курсы, среди которых также можно найти бесплатные.

Примером простого интерфейса может служить машина с коробкой-автоматом

Как вариант, хорошим компромиссом может быть мини-видео (лучше gif) на несколько секунд, чтобы показать сложный момент, который сложно объяснить текстом, чаще всего — показать работу с мышкой.

В видео текст чаще зачитывают, немного изменяя «своими» словами. Вы уверены в своих знаниях и начинаете проектирование. Класс – это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).

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

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

Лично я за семестр что у нас было ООП его совершенно не понял, хотя лабы с богом пополам сделал сам да ещё и одногрупникам помогал. Так что ИМХО, просто теории и практики мало. Нужно сначала брать уже готовые программы на ООП, и разбирать их, причём не на лекциях на доске, а в качестве практических.

Представьте, первый курс, а тут такое. А на кону зачет. Меня «заинтересовали», с тех пор я программирую на C# (уже 2.5 года, получается). Т.е. я ставлю задачу например «написать за пару базовую архитектуру и функциональность прокси с кэшированием». Реально — пара классов с общим интерфейсом и делегированием (ну, собственно, паттерн «прокси»).

Данный видеокурс является продолжением курса «Основы программирования». Плюс ко всему, в GeekBrains преподают практики, для которых программирование — ежедневная работа и поэтому они всегда в курсе самых последних тенденций своей отрасли.

Что еще посмотреть: