Было бы интересно узнать у профи в ооп что является признаками хорошего тона программирования в классах на php. Давно программирую в модулях и недавно начал разбираться в ооп. Знакомый программист глянув в мой класс тут же сказал "во первых призаком хорошего тона является обращение к свойствам через методы". Такие вещи в учебниках не пишут.. интересно сколько еще существует таких правильных и важных тонкостей.. заранее спасиб!
Спустя 5 дней, 5 часов, 22 минуты, 25 секунд (20.11.2007 - 05:08) GMC написал(а):
потому и не пишут, со временем само придет
Спустя 15 часов, 26 минут, 50 секунд (20.11.2007 - 20:35) Patrick написал(а):
помоему в книгах по ООП всё написанно...
Спустя 4 часа, 53 секунды (21.11.2007 - 00:36) Bahjahkah написал(а):
Есть одна крылатая фраза: Плохие программисты получаются из тех, которые не хотят следовать традициям в программировании. (За точность донесения не ручаюсь)
Все эти правила хорошего тона (на первый взгляд ненужные) на самом деле очень полезные вещи и складывались на опыте предыдущих "поколений" и на их ошибках.
Например, правило хорошего тона: писать все константы заглавными буквами. Напр.: CONSTANT_SET_VALUES
Но это все приходит со временем. Никто не сможет подряд все перечислить, это находится где-то на уровне подсознания. И когда уже начинаешь хорошо разбираться в каком-либо конкретном методе, тогда то и начинаешь проглядывать там некую закономерность в стиле или синтаксисе написания, особенно когда сравниваешь работы разных программистов. Вроде все по-разному, но где-то похоже.
Все эти правила хорошего тона (на первый взгляд ненужные) на самом деле очень полезные вещи и складывались на опыте предыдущих "поколений" и на их ошибках.
Например, правило хорошего тона: писать все константы заглавными буквами. Напр.: CONSTANT_SET_VALUES
Но это все приходит со временем. Никто не сможет подряд все перечислить, это находится где-то на уровне подсознания. И когда уже начинаешь хорошо разбираться в каком-либо конкретном методе, тогда то и начинаешь проглядывать там некую закономерность в стиле или синтаксисе написания, особенно когда сравниваешь работы разных программистов. Вроде все по-разному, но где-то похоже.
Спустя 3 дня, 2 часа, 24 минуты, 32 секунды (24.11.2007 - 03:00) mcfalu написал(а):
Цитата(wmlcode @ 14.11.2007, 22:46) [snapback]29353[/snapback]
Знакомый программист глянув в мой класс тут же сказал "во первых призаком хорошего тона является обращение к свойствам через методы".
вообще-то я не очень силён в ООП, не профи, только изучаю и применяю, НО в данной фразе подразумевался механизм инкапсуляции.
ООП построено на 3 основных принципах:
- инкапсуляция;
- наследования;
- полиморфизм.
Как они согласованы в php - чесно не скажу(привел пример с С++).
Инкапсуляция предполагает что все что может происходить с свойствами обьекта класса - исключительно работа внутри класса, и например из вне поменять свойство напрямую нельзя, только коственно с помощю методов.
Например:
есть свойство $title;
и есть метод Settitle($str) которое будет задавать это свойство.
По поводу правилам хорошего тона - для начала нужно разобратся в принципах ООП. Чесно сказать до конца сам плохо понимаю некоторые моменты.)
Спустя 12 часов, 7 минут, 20 секунд (24.11.2007 - 15:08) vasa_c написал(а):
Инкапсуляция, это объединение данных и обрабатывающего их кода в одном месте.
Сокрытие к самим основам понятия инкапсуляции не относится.
Есть большое число языков, отлично реализующих ООП, но не осуществляющих сокрытие
Сокрытие к самим основам понятия инкапсуляции не относится.
Есть большое число языков, отлично реализующих ООП, но не осуществляющих сокрытие
Спустя 8 часов, 19 минут, 11 секунд (24.11.2007 - 23:27) phpmaster написал(а):
1. Если вы решили программировать объекты, первое, что вы должны сделать - чётко разделить своё приложение на составные части и ответить себе на такие вопросы:
а) Зачем нужен тот или иной класс?
б) Что он будет делать?
в) Примерный список свойств и методов
и т.д.
2. По поводу хорошего тона. Если начинать с азов, то везде признаком хорошего стиля программирования (не исключая и ООП) является чёткое соблюдение отступов, табуляций и тому подобных вещей. Короче говоря, требуется сделать так, чтобы строка была читаемой.
Следующая вещь - комментарии. Пускай не сильно подробные, но они вам очень помогут, если вы в своих классах начнёте разбираться через полгода после их создания.
Обращение к свойствам через методы - естественно! Это одна из основных причин, по которым стоит применять объектно-ориентированный подход. Я бы к этому ещё добавил говорящие наименования свойств и методов. Согласитесь, что свойства типа myproperty1 и myproperty2 вам спустя некоторый промежуток времени ничего не скажут. Аналогично с методами.
Наконец, должна быть чётко определённая структура классов. Собственно, вы это решите ответив на вопросы из пункта 1. Но суть в том, что если чётко структуру классов/интерфейсов не определить, то потом самому будет очень сложно ориентироваться в программе.
Вот пока всё. Если что вспомню ещё, допишу
P.S. Да, по поводу трёх "китов" ООП... все они существуют и проявляются в php. Единственное что - наследование в полной мере можно реализовать только в php5 посредством ключевого слова extends. И помните, что php не поддерживает множественное наследование.
а) Зачем нужен тот или иной класс?
б) Что он будет делать?
в) Примерный список свойств и методов
и т.д.
2. По поводу хорошего тона. Если начинать с азов, то везде признаком хорошего стиля программирования (не исключая и ООП) является чёткое соблюдение отступов, табуляций и тому подобных вещей. Короче говоря, требуется сделать так, чтобы строка была читаемой.
Следующая вещь - комментарии. Пускай не сильно подробные, но они вам очень помогут, если вы в своих классах начнёте разбираться через полгода после их создания.
Обращение к свойствам через методы - естественно! Это одна из основных причин, по которым стоит применять объектно-ориентированный подход. Я бы к этому ещё добавил говорящие наименования свойств и методов. Согласитесь, что свойства типа myproperty1 и myproperty2 вам спустя некоторый промежуток времени ничего не скажут. Аналогично с методами.
Наконец, должна быть чётко определённая структура классов. Собственно, вы это решите ответив на вопросы из пункта 1. Но суть в том, что если чётко структуру классов/интерфейсов не определить, то потом самому будет очень сложно ориентироваться в программе.
Вот пока всё. Если что вспомню ещё, допишу
P.S. Да, по поводу трёх "китов" ООП... все они существуют и проявляются в php. Единственное что - наследование в полной мере можно реализовать только в php5 посредством ключевого слова extends. И помните, что php не поддерживает множественное наследование.
Спустя 1 час, 9 минут, 15 секунд (25.11.2007 - 00:36) vasa_c написал(а):
А php4 чем плох в плане наследования?
Спустя 8 минут, 53 секунды (25.11.2007 - 00:45) phpmaster написал(а):
Я могу ошибаться, но вроде бы там нет "extends"...
Если говорить глобально, то php4 плох хотя бы тем, что уже совсем скоро выйдет php6 =) а ещё тем, что начиная с 1 января 2008 года четвёртая версия php более не поддерживается разработчиками. Думаю, что это достаточно весомые доводы
Если говорить глобально, то php4 плох хотя бы тем, что уже совсем скоро выйдет php6 =) а ещё тем, что начиная с 1 января 2008 года четвёртая версия php более не поддерживается разработчиками. Думаю, что это достаточно весомые доводы
Спустя 41 минута, 6 секунд (25.11.2007 - 01:26) mcfalu написал(а):
в php4 потдерживается наследование посредсвом extends.
Спустя 6 минут, 9 секунд (25.11.2007 - 01:32) vasa_c написал(а):
phpmaster, доводы чего?
Спустя 4 часа, 8 минут, 32 секунды (25.11.2007 - 05:41) Patrick написал(а):
Цитата
Cовсем скоро выйдет php6
c чего вы взяли?
Цитата
Есть большое число языков, отлично реализующих ООП, но не осуществляющих сокрытие
пример плиз...
Спустя 9 часов, 58 минут, 28 секунд (25.11.2007 - 15:39) vasa_c написал(а):
Цитата
пример плиз...
Python, JavaScript
Да даже php4. Не слишком здорово он конечно ООП реализовал, но не думаю что одно только появление private в php5 вывело его на десять уровней выше php4.