Я неправильно использую oop? - PullRequest
0 голосов
/ 05 сентября 2018

Я начал учиться около 6 месяцев назад, хотя я на некоторое время остановился из-за учебы.

Проблема в том, что всякий раз, когда я использую oop в своем проекте, я обычно стараюсь просто сделать каждую вещь классом ... Будь то инициализация, отображение, циклы и многое другое ... если быть точным, я не получил понятие о том, когда использовать / создавать классы.

Другая проблема заключается в том, что я не знаю, какое преимущество у классов перед функциями. В настоящее время я просто смешиваю их.

Я смотрю видео на YouTube, в котором рассказывается о классах и коде клиента. В этом видео они сказали, что классы больше похожи на коды разработчиков, а клиентские коды - это коды, которые мы пишем, и которые используют код разработчика для упрощения работы. Поэтому он советует разбить наш код на код клиента / разработчика. Но я не знаю, как разбить мой код на код клиента и код разработчика. На самом деле я создавал классы для всех своих страниц, таких как index.php, about.php

<?php
    class about{
        public $title = 'about page';
        public $page_color = 'red';
      //functions and more codes
  }

После написания приведенного выше кода я знаю, что что-то не так делаю правильно. Я попытался выполнить поиск в Google и прочитал много книг, но каждый раз, когда они используют пример класса car , который я не могу применить к своему кодированию или просто не буду обращаться к контексту, где класс есть или нет ' т необходимо.

Примечание: мне удобно строить сайт с использованием процедурных кодов, но мне нужно учиться, если он мне когда-нибудь понадобится.

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Чтобы ответить на ваш вопрос: Да, вы используете его неправильно. Однако это не быстрое решение , чтобы правильно его использовать.

Я не могу дать вам ответ, который будет означать, что вы начнете писать идеальный код ООП завтра.

Вы на правильном пути, учитесь и практикуйтесь. Делать ошибки, жить с этими ошибками и рефакторинг их. Чем больше вы будете это делать, тем острее будете.

Мне 16 лет, и я все еще нахожу новые правила и исключения в ООП. Это не точная наука - это метод, который может давать разные результаты в зависимости от контекста.

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

0 голосов
/ 05 сентября 2018

ну я не выучил php. Но я хороший Java-разработчик. И мои концепции ООП хороши. Вы упомянули, что не понимаете основных преимуществ классов над функциями. Оба они совершенно разные. Класс - это план программного обеспечения. Где функция представляет поведение программного обеспечения. Вы пишете весь код, который выполняет обработку данных, предоставляемых пользователем как ввод, и генерацию вывода в функциях. Классы содержат эти функции. Основным преимуществом написания кода в классах является то, что они могут быть написаны в одном месте и могут использоваться где угодно И концепции ООП слишком обширны. Все и все нельзя объяснить в постах. ООП гораздо выгоднее, чем процедурное программирование. Представьте, что вы работаете над очень большим проектом. Некоторые функции в программном обеспечении являются общими . В ООП вы можете писать код в одном месте и использовать его где угодно. В процедурном программировании вы должны переписывать один и тот же код везде, где вы используете эти функции. Таким образом, ваша головная боль при написании кода будет минимизирована в ООП. Кроме того, если общий код работает в одном месте, он, очевидно, будет работать везде, где он используется. Так ООП развился из процедурного программирования.

0 голосов
/ 05 сентября 2018

ООП является основой большинства языков программирования, поэтому вы захотите использовать его в основном все время, когда полностью его понимаете.

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

Классы должны содержать данные, относящиеся к каждому из них, в здравом смысле. Например, автомобиль, очевидно, будет содержать Двигатель (другой класс), цвет, имя, владельца и т. Д. И внутри этого двигателя будет храниться собственный набор данных, относящихся к нему (максимальная скорость, миль на галлон, так далее.). Это основа для объединения ваших данных, затем идут классы внутри классов.

Теперь, когда Car хранит данные, относящиеся к автомобилю, Car также содержит функции, которые будет выполнять автомобиль, или функции, которые автомобиль будет использовать для взаимодействия с его данными. Getters (GetColour ()) позволяют внешним объектам получать информацию об этом конкретном автомобиле (так как Car1 и Car2 могут содержать разные цвета). Сеттеры, напротив, устанавливают данные объекта. Тогда у нас есть все остальное. Car.start (), который внутренне вызывает this.engine.start (), который может настраивать некоторые функции, чтобы начать слив газа из двигателя и позволить автомобилю двигаться.

Классы предназначены для того, чтобы их было легко читать, легко понять и легко использовать повторно. После того, как ваш класс автомобилей завершен, вы можете повторно использовать столько автомобилей, сколько вам нужно, и все они прекрасно автономны.

на веб

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

Например: вы заходите на сайт / posts / Stanley, ваш маршрутизатор (еще одна вещь MVC) решает, что это должно быть обработано PostsController (классом). Контроллер постов знает, что вам нужны все посты от пользователя Stanley, поэтому он просит модель постов (класс) получить все посты от Stanley, затем контроллер передает их в представление для заполнения шаблона, используя ваши посты, специфичные для Stanley.

Отойдя от MVC на секунду,

В приведенном примере вы, как я полагаю, будете использовать классы для манипулирования данными и доступа к БД. Например, если вы храните записи блога в базе данных, у вас может быть класс Blog с данными, которые соответствуют вашим строкам БД (id, user_id, title, body) и функциями для доступа к этим данным, чтобы вставить их в HTML-код, но также для получения их из база данных легко.

Например: BlogPost :: All () может возвращать массив каждого сообщения блога, самого нового или самого старого. BlogPost: By (user_id) может возвращать массив сообщений определенного пользователя. BlogPost: Удалить (id) может удалить сообщение в блоге, учитывая его идентификатор. BlogPost: RatingAtLeast (starRating), получить все сообщения в блоге, по крайней мере, с рейтингом starRating.

Вы поняли ... Этот класс будет существовать, как вы сказали выше, чтобы дать вам клиентский код для доступа к вашей базе данных, которая ОСОБЕННА для вашего варианта использования и поскольку BlogPost содержит переменные, связанные с вашим BlogPost. Поэтому BlogPost :: All () вернет массив BlogPost.

...