Loading AI tools
З Вікіпедії, вільної енциклопедії
Відокрéмлення клáсу (англ. Extract class) — прийом рефакторингу, що полягає в розділенні класу та виділенні полів і методів, що підтримують окремий функціонал, у новостворений клас з метою полегшення роботи з даними.
У ході написання програми класи можуть отримати масу додаткових обов'язків.
Якщо часто проводити такий рефакторинг, потрібно буде вдаватися до антирефакторингу — вбудовування класу.
Початковий клас
C#:
class Person
{
public string getName()
{
return _name;
}
public string GetTelephoneNumber()
{
return ("(" + _officeAreaCode + ") " + _officeNumber);
}
string getOfficeAreaCode()
{
return _officeAreaCode;
}
void GetOfficeAreaCode(string arg)
{
_officeAreaCode = arg;
}
string getOfficeNumber()
{
return _officeNumber;
}
void SetOfficeNumber(string arg)
{
_officeNumber = arg;
}
private string _name;
private string _officeAreaCode;
private string _officeNumber;
У такому випадку власника телефонного номера можна виділити в окремий клас
C#:
class TelephoneNumber
{
}
Потім потрібно зробити посилання з персони до телефонного номера
C#:
class Person
{
...
private TelephoneNumber _officeTelephone = new TelephoneNumber();
...
}
Тепер потрібно виконати переміщення поля
C#:
class TelephoneNumber
{
string getAreaCode()
{
return _areaCode;
}
void setAreaCode(string arg)
{
_areaCode = arg;
}
private string _areaCode;
}
class Person
{
public string GetTelephoneNumber()
{
return ("(" + getOfficeAreaCode() + ") " + _officeNumber);
}
string getOfficeAreaCode()
{
return _officeTelephone.getAreaCode();
}
void setOfficeAreaCode(string arg)
{
_officeTelephone.setAreaCode(arg);
}
}
Та переміщення методу
C#:
class Person
{
public string getName()
{
return _name;
}
public string getTelephoneNumber()
{
return _officeTelephone.getTelephoneNumber();
}
TelephoneNumber getOfficeTelephone()
{
return _officeTelephone;
}
private String _name;
private TelephoneNumber _officeTelephone = new TelephoneNumber();
}
class TelephoneNumber
{
public string GetTelephoneNumber()
{
return ("(" + _areaCode + ") " + _number);
}
string getAreaCode()
{
return _areaCode;
}
void SetAreaCode(string arg)
{
_areaCode = arg;
}
string getNumber()
{
return _number;
}
void SetNumber(string arg)
{
_number = arg;
}
private string _number;
private string _areaCode;
}
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.