Введение в объектно-ориентированное программирование
Использование математических методов и среды программирования для решения задач и различных вычислений. Рассмотрение способов добавления свойств и методов. Определение свойств и методов в конструкторе. Возможности создания нескольких методов в классе.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 19.05.2022 |
Размер файла | 510,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ им. М.РЫСКУЛБЕКОВА
КОЛЛЕДЖ ЭКОНОМИКИ и СЕРВИСА
ПМК «Информатика и естественно- научные дисциплины»
СРС
По предмету Объектно-ориентированное программирование
По теме: Введение в объектно-ориентированное программирование
Группа: ПИ 1-20
Выполнила: Акылбекова Алина
Проверила: Турсунбекова Г.Р
Бишкек 2022
Содержание
Введение
Что такое ООП
Способы создания объекта
Класс
Определение свойств и методов
Методы -- это функции, объявленные в качестве свойств объекта
Где определять свойства и методы
Предварительный вывод
Классы против ФФ -- Инкапсуляция
Инкапсуляция и ООП
Заключение
Список использованных источников
Введение
Современный Java Script (JS) - это «безопасный» язык программирования общего назначения. Он не предоставляет низкоуровневых средств работы с памятью, процессором, так как изначально был ориентирован на браузеры, в которых это не требуется. Что же касается остальных возможностей - они зависят от окружения, в котором запущен JavaScript. В браузере JavaScript умеет делать всё, что относится к манипуляции со страницей, взаимодействию с посетителем и, в какой-то мере, с сервером.
Язык JS является алгоритмическим. В нем используются стандартные типы данных. Синтаксис и семантика подобны используемым в таких языках программирования, как Pascal, C++ и др.
Также он является процедурным, т.е. позволяет использовать функции, созданные самим пользователем. Язык JS является широко распространенным и исполняется он любым браузером. Можно производить операции с числами различных типов, представлять их в различных системах счисления и др. JS обладает специальным объектом Math. Он предназначен для хранения некоторых математических констант и математических функций.
Многие из математических функций используются для решения задач и различных вычислений. Для решения задач и выполнения расчетов можно использовать среды программирования. Это позволяет экономить время на подсчетах и решении.
Что такое ООП
По сути, ООП -- это способ написания кода, позволяющий создавать объекты с помощью одного объекта. В этом также заключается суть шаблона проектирования «Конструктор». Общий объект, обычно, называется планом, проектом или схемой (blueprint), а создаваемые с его помощью объекты -- экземплярами (instances).
Каждый экземпляр имеет как свойства, наследуемые от родителя, так и собственные свойства. Например, если у нас имеется проект Human (человек), мы можем создавать на его основе экземпляры с разными именами.Второй аспект ООП состоит в структурировании кода, когда у нас имеется несколько проектов разного уровня. Это называется наследованием (inheritance) или классификацией (созданием подклассов) (subclassing).
Третий аспект ООП -- инкапсуляция, когда мы скрываем детали реализации от посторонних, делая переменные и функции недоступными извне. В этом заключается суть шаблонов проектирования «Модуль» и «Фасад».
Способы создания объекта
JavaScript существует 4 способа создать объект:
· Функция-контруктор (constructor function)
· Класс (class)
· Связывание объектов (object linking to other object, OLOO)
· Фабричная функция (factory function)
Функция-конструктор
Конструкторами являются функции, в которых используется ключевое слово «this».
function Human(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
this позволяет сохранять и получать доступ к уникальным значениям создаваемого экземпляра. Экземпляры создаются с помощью ключевого слова «new».
const chris = new Human('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
const zell = new Human('Zell', 'Liew')
console.log(zell.firstName) // Zell
console.log(zell.lastName) // Liew
Класс
Классы являются абстракцией («синтаксическим сахаром») над функциями-конструкторами. Они облегчают задачу создания экземпляров.
class Human {
constructor(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
}
Обратите внимание, что constructor содержит тот же код, что и функция-конструктор, приведенная выше. Мы должны это делать, чтобы инициализировать this. Мы может опустить constructor, если нам не требуется присваивать начальные значения.
На первый взгляд, классы кажутся сложнее, чем конструкторы -- приходится писать больше кода. Придержите лошадей и не делайте поспешных выводов. Классы -- это круто. Чуть позже вы поймете почему.
Экземпляры также создаются с помощью ключевого слова «new».
const chris = new Human('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
Связывание объектов
Данный способ создания объектов был предложен Kyle Simpson. В данном подходе мы определяем проект как обычный объект. Затем с помощью метода (который, как правило, называется init, но это не обязательно, в отличие от constructor в классе) мы инициализируем экземпляр.
const Human = {
init(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
}
Для создания экземпляра используется Object.create. После создания экземпляра вызывается init.
const chris = Object.create(Human)
chris.init('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
Код можно немного улучшить, если вернуть this в init.
const Human = {
init () {
//...
return this
}
}
const chris = Object.create(Human).init('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
Фабричная функция
Фабричная функция -- это функция, возвращающая объект. Можно вернуть любой объект. Можно даже вернуть экземпляр класса или связывания объектов.
Вот простой пример фабричной функции.
function Human(firstName, lastName) {
return {
firstName,
lastName
}
}
Для создания экземпляра нам не требуется ключевое слово «new». Мы просто вызываем функцию.
const chris = Human('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
Теперь давайте рассмотрим способы добавления свойств и методов.
Определение свойств и методов
Методы -- это функции, объявленные в качестве свойств объекта.
const someObject = {
someMethod () { /*... */ }
}
В ООП существует два способа определения свойств и методов:
· В экземпляре
· В прототипе
Определение свойств и методов в конструкторе
Для определения свойства в экземпляре необходимо добавить его в функцию-конструктор. Убедитесь, что добавляете свойство к this.
function Human (firstName, lastName) {
// Определяем свойства
this.firstName = firstName
this.lastname = lastName
// Определяем методы
this.sayHello = function () {
console.log(`Hello, I'm ${firstName}`)
}
}
const chris = new Human('Chris', 'Coyier')
console.log(chris)
Методы, обычно, определяются в прототипе, поскольку это позволяет избежать создания функции для каждого экземпляра, т.е. позволяет всем экземплярам использовать одну функцию (такую функцию называют общей или распределенной).
Для добавления свойства в прототип используют prototype.
function Human (firstName, lastName) {
this.firstName = firstName
this.lastname = lastName
}
// Определяем метод в прототипе
Human.prototype.sayHello = function () {
console.log(`Hello, I'm ${this.firstName}`)
}
Создание нескольких методов может быть утомительным.
// Определение методов в прототипе
Human.prototype.method1 = function () { /*...*/ }
Human.prototype.method2 = function () { /*...*/ }
Human.prototype.method3 = function () { /*...*/ }
Можно облегчить себе жизнь с помощью Object.assign.
Object.assign(Human.prototype, {
method1 () { /*...*/ },
method2 () { /*...*/ },
method3 () { /*...*/ }
})
Определение свойств и методов в классе
Свойства экземпляра можно определить в constructor.
class Human {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
this.sayHello = function () {
console.log(`Hello, I'm ${firstName}`)
}
}
}
Свойства прототипа определяются после constructor в виде обычной функции.
class Human (firstName, lastName) {
constructor (firstName, lastName) { /*... */ }
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
программирование конструктор класс вычисление
Создание нескольких методов в классе проще, чем в конструкторе. Для этого нам не нужен Object.assign. Мы просто добавляем другие функции.
class Human (firstName, lastName) {
constructor (firstName, lastName) { /*... */ }
method1 () { /*...*/ }
method2 () { /*...*/ }
method3 () { /*...*/ }
}
Определение свойств и методов при связывании объектов
Для определения свойств экземпляра мы добавляем свойство к this.
const Human = {
init (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
this.sayHello = function () {
console.log(`Hello, I'm ${firstName}`)
}
return this
}
}
const chris = Object.create(Human).init('Chris', 'Coyier')
console.log(chris)
Метод прототипа определяется как обычный объект.
const Human = {
init () { /*...*/ },
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
Определение свойств и методов в фабричных функциях (ФФ)
Свойства и методы могут быть включены в состав возвращаемого объекта.
function Human (firstName, lastName) {
return {
firstName,
lastName,
sayHello () {
console.log(`Hello, I'm ${firstName}`)
}
}
}
При использовании ФФ нельзя определять свойства прототипа. Если вам нужны такие свойства, можно вернуть экземпляр класса, конструктора или связывания объектов (но это не имеет смысла).
// Не делайте этого
function createHuman (...args) {
return new Human(...args)
}
Где определять свойства и методы
Где следует определять свойства и методы? В экземпляре или в прототипе?
Многие считают, что для этого лучше использовать прототипы.
Однако на самом деле это не имеет особого значения.
При определении свойств и методов в экземпляре, каждый экземпляр будет расходовать больше памяти. При определении методов в прототипах, память будет расходоваться меньше, но незначительно. Учитывая мощность современных компьютеров, эта разница является несущественной. Поэтому делайте так, как вам удобней, но все же предпочитайте прототипы.
Например, при использовании классов или связывания объектов, лучше использовать прототипы, поскольку в этом случае код легче писать. В случае ФФ прототипы использовать нельзя. Можно определять только свойства экземпляров.
Прим. пер.: позволю себе не согласиться с автором. Вопрос использования прототипов вместо экземпляров при определении свойств и методов -- это не только вопрос расходования памяти, но, прежде всего, вопрос назначения определяемого свойства или метода.
Если свойство или метод должны быть уникальными для каждого экземпляра, тогда они должны определяться в экземпляре. Если свойство или метод должны быть одинаковыми (общими) для всех экземпляров, тогда они должны определяться в прототипе. В последнем случае при необходимости внесения изменений в свойство или метод достаточно будет внести их в прототип, в отличие от свойств и методов экземпляров, которые корректируются индивидуально.
Предварительный вывод
На основе изученного материала можно сделать несколько выводов. Это мое личное мнение.
· Классы лучше конструкторов, поскольку в них легче определять несколько методов.
· Связывание объектов кажется странным из-за необходимости использовать Object.create. Я постоянно забывал об этом при изучении данного подхода. Для меня это было достаточной причиной отказаться от его дальнейшего использования.
· Классы и ФФ использовать проще всего. Проблема состоит в том, что в ФФ нельзя использовать прототипы. Но, как я отметил ранее, это не имеет особого значения.
Далее мы будем сравнивать между собой классы и ФФ как два лучших способа создания объектов в JavaScript.
Классы против ФФ -- Инкапсуляция
По сути, инкапсуляция -- это скрытие одной вещи внутри другой, из-за чего внутренняя сущность становится недоступной снаружи.
В JavaScript скрываемыми сущностями являются переменные и функции, которые доступны только в текущем контексте. В данном случае контекст -- это тоже самое, что область видимости.
Простая инкапсуляция
Простейшей формой инкапсуляции является блок кода.
{
// Переменные, объявленные здесь, будут иметь блочную область видимости
}
Находясь в блоке, можно получить доступ к переменной, объявленной за его пределами.
const food = 'Hamburger'
{
console.log(food)
}
Но не наоборот.
{
const food = 'Hamburger'
}
console.log(food)
Обратите внимание, что переменные, объявленные с помощью ключевого слова «var», имеют глобальную или фукнциональную область видимости. Старайтесь не использовать var для объявления переменных.
Инкапсуляция и ООП
При создании объектов мы хотим, чтобы одни свойства были открытыми (публичными), а другие закрытыми (частными или приватными).
Рассмотрим пример. Скажем, у нас имеется проект «Car». При создании нового экземпляра мы добавляем ему свойство «fuel» (топливо) со значением 50.
class Car {
constructor () {
this.fuel = 50
}
}
Пользователи могут использовать это свойство для определения количества оставшегося топлива.
const car = new Car()
console.log(car.fuel) // 50
Пользователи также могут самостоятельно устанавливать количество топлива.
const car = new Car()
car.fuel = 3000
console.log(car.fuel) // 3000
Давайте добавим условие, согласно которому бак автомобиля вмещает максимум 100 литров топлива. Мы не хотим, чтобы пользователи имели возможность самостоятельно устанавливать количество топлива, потому что они могут сломать машину.
Заключение
Итак, в данной статье мы рассмотрели четыре способа создания объектов в JavaScript:
· Функции-конструкторы
· Классы
· Связывание объектов
· Фабричные функции
Во-первых, мы пришли к выводу, что наиболее оптимальными способами создания объектов являются классы и ФФ. Во-вторых, мы увидели, что подклассы легче создавать с помощью классов. Однако, в случае композиции лучше использовать ФФ.
В-третьих, мы резюмировали, что, когда речь идет об инкапсуляции, ФФ имеют преимущество перед классами, поскольку последние требуют использования специального префикса "#", а ФФ делают переменные частными автоматически.
В-четвертых, ФФ позволяют обойтись без использования this в качестве ссылки на экземпляр. В классах приходится прибегать к некоторым хитростям, дабы вернуть this исходный контекст, измененный обработчиком событий. На этом у меня все. Надеюсь, статья вам понравилась. Благодарю за внимание.
Список использованных источников
1. Вайк, А. JavaScript: Полное руководство / Аллен Вайк. 4-е издание. М.: Вильямс, 2014. 720 с.
2. Гудман, В. JavaScript. Библия пользователя / Д. Гудман. СПб.: Вильямс, 2016. 1184 с.
3. Дмитриева В. JavaScript: пособие / В. Дмитриева. СПб.: BHV-СПб, 2014. 336 с.
4. Зольников, В. К. Программирование и основы алгоритмизации: учебное пособие / В. К. Зольников, П. Р. Машевич, В. И. Анциферова, Н. Н. Литвинов. Воронеж: ВГЛА, 2014. 341 с.
5. Кингсли-Хью, Э. Java Script: учебный курс / Э. Кингсли-Хью. СПб.: Питер, 2015. 256 с.
6. Ломов, А.Ю. HTML, CSS, Скрипты: практика создания сайтов: самоучитель / А.Ю. Ломов. СПб.: БХВ-Санкт-Петербург, 2016. 416 с.
7. Митина, О. А. Программирование: методические указания / О. А. Митина, Т. Л. Борзунова. Альтаир: МГАВТ, 2015. 61 с.
8. Мэрдюк, К. JavaScript. Наглядный курс создания динамических Web-страниц: учебное пособие / К. Мэрдок. М.: Диалектика, 2014. 288 с.
9. Финогенов, К. Г. Win32: основы программирования / К. Г.
Размещено на Allbest.ru
...Подобные документы
Особенности решения задач нелинейного программирования различными методами для проведения анализа поведения этих методов на выбранных математических моделях нелинейного программирования. Общая характеристика классических и числовых методов решения.
дипломная работа [2,4 M], добавлен 20.01.2013Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.
контрольная работа [51,7 K], добавлен 22.01.2013Анализ методов объектно-ориентированного программирования на примере численных. Детальная характеристика модулей и связь их в одну общую программу. Принципы интегрирования по общей формуле трапеции и решение дифференциального уравнения методом Эйлера.
курсовая работа [511,6 K], добавлен 25.03.2015Анализ методов решения разреженных недоопределенных систем линейных алгебраических уравнений с помощью эффективных алгоритмов, основанных на декомпозиции линейных систем и учете их сетевых свойств. Использование встроенных методов пакета Mathematica.
курсовая работа [4,2 M], добавлен 22.05.2014Использование объектно-ориентированной методологии при программировании математических процессов. Среда языка программирования Delphi для решения математических задач. Объектно-ориентированные, декларативные и императивные языки программирования.
дипломная работа [1,8 M], добавлен 14.09.2011Математическое описание исследуемых методов решения дифференциальных уравнений, содержание закона Зейделя. Принципы построения алгоритма программы, общее описание ее интерфейса. Стандартные и нестандартные модули, их отличительные свойства и значение.
курсовая работа [251,4 K], добавлен 22.01.2015Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.
курсовая работа [398,1 K], добавлен 26.02.2015Объектно-ориентированное программирование как методология программирования, опирающаяся на инкапсуляции, полиморфизме и наследовании. Общая форма класса. Наследование как процесс, посредством которого один объект получает свойства другого объекта.
презентация [214,9 K], добавлен 26.10.2013Фурье и Данцига как основоположники методов математического программирования. Знакомство с теорией решения транспортных задач. Анализ способов применения симплекс-метода. Рассмотрение примера решения транспортной задачи в области электроэнергетики.
презентация [981,0 K], добавлен 28.04.2014Опытное исследование свойств методов Рунге-Кутты. Реализация численных методов приближенного интегрирования обыкновенных дифференциальных уравнений, наиболее часто применяющихся в практике моделирования и проектирования систем автоматизации и управления.
курсовая работа [311,5 K], добавлен 05.03.2009Рассмотрение основных этапов создания приложения "Записная книжка", основное предназначение. Анализ способов выбора среды программирования. Знакомство с элементом управления Data Grid View. Общая характеристика методов конструкции языка программирования.
контрольная работа [1002,4 K], добавлен 21.06.2014Решение задач нелинейного программирования различными методами для проведения анализа поведения этих методов на выбранных математических моделях. Компьютерная реализация выбранных задач нелинейного программирования в среде пакетов Excel и Matlab.
дипломная работа [2,9 M], добавлен 25.01.2013Характеристика параметрических методов решения задач линейного программирования: методы внутренней и внешней точки, комбинированные методы. Алгоритм метода барьерных поверхностей и штрафных функций, применяемых для решения задач большой размерности.
контрольная работа [59,8 K], добавлен 30.10.2014Сущность среды программирования Turbo Pascal. Разработка программы с учетом потребительских свойств. Особенности методов современной технологии программирования (пошаговой детализации, структурный, модульный принцип, метод иерархической декомпозиции).
курсовая работа [57,1 K], добавлен 03.03.2011Сущность, принципы и описание методов и этапов имитационного моделирования. Процессы и применение дискретного и непрерывного алгоритма. Характеристика методов построения математических моделей для решения управленческих задач банковской системы.
курсовая работа [80,5 K], добавлен 29.05.2014Описание математических методов решения задачи оптимизации. Рассмотрение использования линейного программирования для решения транспортной задачи. Применение симплекс-метода, разработка разработать компьютерной модели в Microsoft Office Excel 2010.
курсовая работа [1,5 M], добавлен 24.05.2015Изучение базовых понятий объектно-ориентированного программирования. Исследование принципов работы с классами и объектами. Построение системы классов для описания плоских геометрических фигур. Анализ методов создания объектов, перемещения на плоскости.
лабораторная работа [212,0 K], добавлен 10.03.2013Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.
контрольная работа [25,1 K], добавлен 14.03.2015Изучение классов и методов языка программирования C#. Реализация программирования математических задач. Поиск корня на монотонном интервале квадратичного полинома. Ручной подсчёт отладочного варианта. Заполнение массива, хранящего информацию о студентах.
курсовая работа [752,1 K], добавлен 27.02.2015Виды и оценка различных численных методов нелинейного программирования. Разработка способов вычисления оптимальных решений. Целевая функция метода проекции антиградиента. Решение тестовых задач в MS Excel. Определение направления проекции антиградиента.
курсовая работа [216,1 K], добавлен 22.01.2015