me@helium 7 anni fa
parent
commit
d7314497fa
1 ha cambiato i file con 118 aggiunte e 0 eliminazioni
  1. 118 0
      07HomeWork.md

+ 118 - 0
07HomeWork.md

@@ -0,0 +1,118 @@
+# Начала ООП: ДЗ.
+
+## Тестовый код
+
+Ниже будет встречаться тестовый код, который, будучи запущен после выполненной части задания должен корректно отработать, т. е. без синтаксических
+ошибок и с ожидаемыми результатами. Если вы во вкладке с заданиями откроете **Developer Tools** и вставите туда свой код, то для проверки достаточно
+сделать "click here to run code" и посмотреть на результаты
+
+## Person
+
+Расширьте функцию-конструктор `Person` следующими полями и возможностями:
+
+### `age`
+
+Добавьте поле `age` в параметры конструктора
+
+```javascript
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
+agedPerson1.age // => 45
+
+var agedPerson2 = new Person("Barak", "Kennedy", 15)
+agedPerson2.age // => 15
+```
+
+### `hasPassport`
+
+Добавьте функцию-метод (т. е. функцию объекта), которая возвращает, есть ли паспорт у персоны, отталкиваясь от возраста.
+
+```javascript
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
+agedPerson1.hasPassport(); // true
+
+var agedPerson2 = new Person("Barak", "Kennedy", 15)
+agedPerson2.hasPassport(); // false
+```
+
+## PhoneNumber
+
+Создайте функцию-конструктор `PhoneNumber`, с двумя параметрами:
+- `number` - строка с номером телефона
+- `type`   - тип номера, один из трех вариантов: `home`, `office`, `mobile`
+
+```javascript
+var policeNumber = new PhoneNumber("+380577102", "office")
+policeNumber // => PhoneNumber{number: "+380577102", type: "office"}
+
+var medNumber = new PhoneNumber("+380577103", "mobile")
+medNumber // => PhoneNumber{number: "+380577103", type: "mobile"}
+```
+
+## Person и PhoneNumber
+
+### Person
+
+#### `addNumber`
+Создайте функцию-метод, которая будет добавлять номер телефона (объект `PhoneNumber`) во внутренний массив `phones` объекта Person. Делайте проверку на повтор и не добавляйте
+номер, если он уже присутствует в массиве `phones`
+
+```javascript
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
+var phoneNum    = new PhoneNumber("+380671234567", "mobile")
+agedPerson1.addNumber(new PhoneNumber("+380577123456", "home"))
+agedPerson1.addNumber(phoneNum)
+agedPerson1.addNumber(phoneNum) // добавить не должно, должна сработать проверка на повтор
+```
+
+#### `getNumbers`
+Создайте функцию-метод, которая будет возвращать список номеров (массив `phones`)
+
+```javascript
+agedPerson1.getNumbers() // массив с двумя объектами PhoneNumber после предыдущего тестового кода
+```
+
+### PhoneNumber
+#### `addOwner`
+Создайте функцию-метод, которая будет добавлять владельца номера телефона (объект `Person`) во внутренний массив `owners` объекта PhoneNumber. Не позволяйте
+дублировать владельца. Так же не позволяйте добавлять более одного владельца для мобильных номеров, это разрешено только для офисных и домашних номеров
+телефонов (`type` "office" и "home")
+
+```javascript
+var policeNumber = new PhoneNumber("+380577102", "office")
+var medNumber = new PhoneNumber("+380577103", "mobile")
+
+var agedPerson1 = new Person("Ivan", "Ivanovv", 45)
+var agedPerson2 = new Person("Barak", "Kennedy", 15)
+
+policeNumber.addOwner(agedPerson1)
+policeNumber.addOwner(agedPerson2)
+
+medNumber.addOwner(agedPerson1)
+medNumber.addOwner(agedPerson2) // не должно добавить, так как medNumber - мобильный номер, относящийся только к одному владельцу
+```
+
+
+#### `getOwners`
+Создайте функцию-метод, которая будет возвращать список владельцев (массив `owners`). Для мобильных номеров возвращайте не массив с одним элементом,
+а напрямую единственного владельца.
+
+```javascript
+medNumber.getOwners() // => один объект Person
+policeNumber.getOwners() // => массив объектов-владельцев номера
+```
+
+### Всё вместе.
+Обеспечьте двойную связность номеров и людей: при добавлении номера к человеку, в номер должна заносится связь с человеком. И наоборот, при добавлении
+человека как владельца номера, к персоне должна добавляться связь с номером.
+
+```javascript
+var newPerson = new Person("Lee", "See-Tsyn", 35)
+var newNumber = new PhoneNumber("+380667654321", "mobile")
+
+newNumber.addOwner(newPerson)
+newPerson.getNumbers() // => массив из одного номера телефона, который хранится в newNumber
+
+var anotherNumber = new PhoneNumber("+380681231231", "mobile")
+newPerson.addNumber(anotherNumber)
+anotherNumber.getOwners() // => newPerson 
+```