Рекомендации по программированию

ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Методические указания и задания

по выполнению курсовой работы

Иркутск 2009 г.

Зарак Т.В.

Объектно-ориентированное программирование: Методические указания и задания по выполнеию курсовой работы. – Иркутск, Изд-во ИрГТУ. – 2009. – 16 с.

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


СОДЕРЖАНИЕ

Рекомендации по программированию  
Пример решения задачи  
Оформление курсовой работы  
  Задания  
  Список литературы  

РЕКОМЕНДАЦИИ ПО ПРОГРАММИРОВАНИЮ

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

При создании класса, то есть нового типа данных, следует хорошо продумать его интерфейс – средства работы с классом, доступные использующим его программистам. Интерфейс хорошо спроектированного класса ясен, непротиворечив и обозрим. Как правило, он должен включать только методы, но не поля данных. Поля данных должны быть скрыты (private). Это дает возможность впоследствии изменить реализацию класса без изменений в его интерфейсе, а также регулировать доступ к полям класса с помощью набора предоставляемых пользователю методов.

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

Не нужно расширять интерфейс класса без необходимости, «на всякий случай», поскольку увеличение количества методов ведет к трудности понимания класса пользователем. В идеале интерфейс должен быть полным, то есть предоставлять возможность выполнить любые разумные действия с классом, и минимальным – без дублирования и пересечения возможностей методов.

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

Для увеличения производительности программ, наиболее часто вызываемые методы можно объявить как встроенные (inline). В основном это касается коротких методов. Кроме ускорения программы за счет исключения вызовов, это дает возможность компилятору производить более полную оптимизацию.

Перегруженные операции класса должны иметь интуитивно понятный общепринятый смысл (например, не следует заставлять операцию + выполнять что-либо, кроме сложения или добавления). В основном перегрузка операций используется для создаваемых программистом арифметических типов, а в остальных случаях для реализации каких-либо действий с объектами класса предпочтительнее использовать методы, поскольку им можно дать осмысленные имена. Если какая-либо операция перегружена, следует, если возможно, перегрузить и аналогичные операции, например, +, += и ++.

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

T::T(const T&){ тело конструктора}

Где Т – имя класса.

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

В конструкторах для задания начальных значений полям рекомендуется использовать инициализацию, а не присваивание:

class X{

char *s;

public:

X(char *str);

};

// вариант конструктора с присваиванием

X::X (char *str) {s=str;}

// вариант конструктора с инициализацией

X::X (char *str): s(str) { }

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

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

Возврат на содержание



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: