UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap:)];
singleTap.numberOfTapsRequired = 1;
singleTap.numberOfTouchesRequired = 1;
singleTap.delegate = self;
[imageview1 addGestureRecogniser:singleTap];
[singleTap1 release];
imageview1.userInteractionEnabled = YES; //disabled by default
Похоже, вы хотите задать себе несколько простых вопросов типа да / нет. Все составили несколько замечательных списков «делай это» и «думай так», так что вот мой ответ на несколько простых «да / нет».
Могу я ответить утвердительно на все эти вопросы?
Могу ли я ответить «нет» на все эти вопросы?
Просто несколько быстрых слов из моей головы. Надеюсь, это поможет, ООП может стать довольно сумасшедшим. Я не включил никаких да / нет для более сложных вещей, которые обычно возникают в больших приложениях,
Книга Стива МакКоннелла Code Complete 2 содержит множество готовых к использованию контрольных списков для создания хорошего программного обеспечения.
Роберт С. Мартин Agile Principles, Patterns, and Практики в C # содержат множество принципов хорошего объектно-ориентированного проектирования.
Оба дадут вам прочную основу для начала.
Убедитесь, что вы прочитали и поняли следующую инкапсуляцию
Мне нравится этот список, хотя он мог бы быть немного сложным для использования в качестве контрольного списка.
Одним из лучших источников может быть книга Мартина Фаулера «Рефакторинг», которая содержит список (и вспомогательные детали) запахов объектно-ориентированного кода, которые вы, возможно, захотите рассмотреть при рефакторинге.
Я бы также порекомендовал контрольные списки из "Чистого кода" Роберта Мартина.
UML - унифицированный язык моделирования, для моделирования объектов и определения структуры и отношений между классами
http://en.wikipedia.org/wiki/Unified_Modeling_Language
Тогда, конечно методы программирования для объектно-ориентированного программирования (большинство уже упоминалось)
Have I clearly defined the requirements? Formal requirements documentation may not be necessary, but you should have a clear vision before you begin coding. Mind-mapping tools and prototypes or design sketches may be good alternatives if you don't need formal documentation. Work with end-users and stakeholders as early as possible in the software process, to make sure you are implementing what they need.
Am I reinventing the wheel? If you are coding to solve a common problem, look for a robust library that already solves this problem. If you think you might already have solved the problem elsewhere in your code (or a co-worker might have), look first for an existing solution.
Does my object have a clear, single purpose? Following the principle of Encapsulation, an object should have behavior together with the data that it operates on. An object should only have one major responsibility.
Can I code to an interface? Design By Contract is a great way to enable unit testing, document detailed, class-level requirements, and encourage code reuse.
Can I put my code under test? Test-Driven Development (TDD) is not always easy; but unit tests are invaluable for refactoring, and verifying regression behavior after making changes. Goes hand-in-hand with Design By Contract.
Am I overdesigning? Don't try to code a reusable component. Don't try to anticipate future requirements. These things may seem counterintuitive, but they lead to better design. The first time you code something, just implement it as straightforwardly as possible, and make it work. The second time you use the same logic, copy and paste. Once you have two working sections of code with common logic, you can easily refactor without trying to anticipate future requirements.
Am I introducing redudant code? Don't Repeat Yourself (DRY) is the biggest driving principal of refactoring. Use copy-and-paste only as a first step to refactoring. Don't code the same thing in different places, it's a maintenance nightmare.
Is this a common design pattern, anti-pattern, or code smell? Be familiar with common solutions to OO design problems, and look for them as you code - but don't try to force a problem to fit a certain pattern. Watch out for code that falls into a common "bad practice" pattern.
Is my code too tightly coupled? Loose Coupling is a principle that tries to reduce the inter-dependencies between two or more classes. Some dependencies are necessary; but the more you are dependent on another class, the more you have to fix when that class changes. Don't let code in one class depend on the implementation details of another class - use an object only according to its contract.
Am I exposing too much information? Practice information hiding. If a method or field doesn't need to be public, make it private. Expose only the minimum API necessary for an object to fulfill its contract. Don't make implementation details accessible to client objects.
Am I coding defensively? Check for error conditions, and Fail Fast. Don't be afraid to use exceptions, and let them propagate. In the event your program reaches an unexpected state, it's much, much better to abort an operation, log a stack trace for you to work with, and avoid unpredictable behavior in your downstream code. Follow best practices for cleaning up resources, such as the using() {}
statement.
Will I be able to read this code in six months? Good code is readable with minimal documentation. Put comments where necessary; but also write code that's intuitive, and use meaningful class, method, and variable names. Practice good coding style; if you're working on a team project, each member of the team should write code that looks the same.
Does it still work? Test early, test often. After introducing new functionality, go back and touch any existing behavior that might have been affected. Get other team members to peer review and test your code. Rerun unit tests after making changes, and keep them up to date.
Некоторые правила не зависят от языка, некоторые правила различаются от языка к языку.
Вот несколько правил и комментариев, которые противоречат некоторым другим ранее опубликованным правилам:
ОО имеет 4 принципа:
Абстракция, инкапсуляция, полиморфизм и наследование.
Прочтите о них и помните о них.
Моделирование - ваши классы должны моделировать сущности в проблемной области:
Разделите проблему на поддомены (пакеты / пространства имен / сборки)
затем разделите объекты в каждой подобласти на классы.
Классы должны содержать методы, моделирующие то, что делают объекты этого типа.
Используйте UML, подумайте о требованиях, вариантах использования, затем диаграммах классов, их последовательностях. (применимо в основном для высокоуровневого проектирования - основные классы и процессы.)
Шаблоны проектирования - хорошая концепция для любого языка, реализация различается между языками.
Структура и класс - в C # это вопрос передачи данных через значение или по ссылке.
Интерфейс по сравнению с базовым классом, это базовый класс, выполняет интерфейс.
TDD - это не объектно-ориентированный объект, на самом деле, он может вызвать недостаток дизайна и привести к большому количеству переписывания. (Scrum, например, не рекомендует это делать, для XP это обязательно.)
Рефлексия C # в некотором смысле переопределяет объектно-ориентированный подход (например, сериализацию на основе отражения), но это необходимо для продвинутых фреймворков.
Убедитесь, что классы этого не делают " знать о «других классах, если они не должны», разделение на несколько сборок и недостаток ссылок помогает.
АОП (Аспектно-ориентированное программирование) улучшает ООП, у них есть много полезных руководств и соглашений
Рекомендуемые книги:
Рекомендации по созданию инфраструктуры: условные обозначения, идиомы и шаблоны для многоразовых библиотек .NET
В двух словах о C # 3.0
Собран из различных книг, известных программистов C # и общих советов (не много, если что-то из этого принадлежит мне; в том смысле, что это различные вопросы, которые я задаю себе во время разработки, но это все) :
Я мог бы выбросить часть или все это за дверь, если я:
Эти принципы помогают мне в повседневной жизни кодирования и значительно улучшил качество кодирования в некоторых областях! надеюсь, что это поможет!