Toshkent axborot texnologiyalari universiteti dasturiy ta'minot arxitekturasi


SumCalculatorOutputter factor vazifasi bu yoqdi ishlash


Download 23.54 Kb.
bet3/7
Sana14.01.2022
Hajmi23.54 Kb.
#337055
1   2   3   4   5   6   7
DTA312Amaliy2
Bog'liq
2 5199664228046212137, bolalar anatomiyasi va fiziologiyasi asoslari fanini organish usullari, 1 4956737600724402347, 1 4956737600724402347, 1 4956737600724402347, 1 4956737600724402347, Азамат Файзуллаев, Hurshida oraliq, MUSTAQIL ISH, 2 5330100572349533156, kursdoshlar obyektivka, YPIP Application Sample, is gazi(1), is gazi(1), maruza matn
SumCalculatorOutputter factor vazifasi bu yoqdi ishlash:

const shakllari = [

doira (2),

kvadrat (5),

kvadrat (6)

]

const maydonlari = maydonCalculator (shakllar)



const chiqishi = sumCalculatorOputter (maydonlar)

console.log (output.JSON ())

console.log (output.HAML ())

console.log (output.HTML ())

console.log (output.JADE ())

Ma'lumotlarni foydalanuvchilarga chiqarishingiz kerak bo'lgan har qanday mantiq endi sumCalculatorOutputter zavod funktsiyasi bilan ishlaydi.



Ochiq yopiq printsip

Ob'ektlar yoki ob'ektlar kengaytirish uchun ochiq bo'lishi kerak, ammo o'zgartirish uchun yopiq bo'lishi kerak.

Kengaytish uchun ochilgan narsa, mavjud kodni buzmasdan dasturga yangi xususiyatlar yoki tarkibiy qismlar qo'shishimiz kerakligini anglatadi .

O'zgartirish uchun yopiq degani, mavjud funktsiyalarga o'zgartirishlarni kiritmasligimiz kerak , chunki bu sizni ko'plab mavjud kodlarni qayta ishlashga majbur qiladi -

Erik Elliott

Oddiyroq so'zlar bilan aytganda, bizning holatimizdagi sinf yoki zavod funktsiyasi, sinf yoki funktsiyani o'zi o'zgartirmasdan osongina kengaytirilishi kerak degan ma'noni anglatadi. Keling, areaCalculator zavodining funktsiyasini ko'rib chiqamiz , ayniqsa bu yig'indisi usuli.

sum () {

const area = [] for (this.shapes) {

if (shape.type === 'Square') {

area.push (Math.pow (shape.length, 2)

} else if (form .type === 'Circle') {

area.push (Math.PI * Math.pow (shape.length, 2)

}

}

return area.reduce ((v, c) => c + = v, 0)



}

Agar biz yig'indilar usuli ko'proq shakldagi maydonlarni yig'ib olishini istasak, if / else bloklarini ko'proq qo'shishimiz kerak edi va bu ochiq-yopiq printsipga zid keladi .

Ushbu yig'indilar usulini yaxshiroq qilishning usuli - har bir shaklning maydonini yig'indisidan hisoblash mantig'ini olib tashlash va uni shaklning zavod funktsiyalariga qo'shishdir.

const kvadrat = (uzunlik) => {

const proto = {

turi: 'Kvadrat',

maydon () {

return Math.pow (this.length, 2)

}

}

return Object.assign (Object.create (proto), {length })



}

Xuddi shu narsa aylana fabrikasi funktsiyasi uchun bajarilishi kerak , maydon usuli qo'shilishi kerak. Keling, taqdim etilgan har qanday shaklning yig'indisini hisoblash juda oddiy bo'lishi kerak:

sum () {

const area = [] for (this.shapes) {

area.push (shape.area ())

}

return area.uce ((v, c) => c + = v, 0)



})

Endi biz yana bir shakl sinfini yaratib, yig'indini hisoblashda kodimizni buzmasdan topshirishimiz mumkin. Ammo, endi yana bir muammo tug'iladi, biz maydonga o'tgan ob'ekt aslida qanday shakl ekanligini yoki shaklda maydon nomi berilgan usuli borligini qaerdan bilamiz ?

Bir interfeysi kodlash ajralmas qismi hisoblanadi SOLID, tez misol biz har bir shakli ijro, bir interfeysi yaratish, deb.

JavaScript-da interfeyslar bo'lmaganligi sababli, men sizga TypeScript-da bunga qanday erishish mumkinligini ko'rsataman, chunki TypeScript JavaScript uchun klassik OOP-ni va sof JavaScript Prototypal OO bilan farq qiladi.

interfeysi ShapeInterface {area (): number }

class Circle ShapeInterface dasturini amalga oshiradi {

radius: number = 0

constructor (r: number) {

this.radius = r

}

public area (): number {



return MATH.PI * MATH.pow (this.radius, 2)

}

}



Yuqoridagi misolda bunga TypeScript-da qanday erishish mumkinligi ko'rsatilgan, ammo TypeScript qopqog'i ostida kodni sof JavaScript-ga kompilyatsiya qiladi va kompilyatsiya qilingan kodda interfeyslar etishmaydi, chunki JavaScript-da yo'q.

Xo'sh, interfeys etishmovchiligida bunga qanday erishishimiz mumkin?

Qutqarish uchun funktsiya tarkibi !

Birinchi biz yaratish shapeInterface biz interfeysi haqida gaplashayotgan sifatida, vazifasi tarkibini foydalanib, bir interfeys ravishda ajratilgan bo'lib, bizning shapeInterface bo'ladi, zavod vazifasini chuqur tushuntirish uchun tarkibi , bu katta videoni ko'rish.

const shapeInterface = (holat) => ({

turi: 'shapeInterface', maydon: () => holat.area (holat) })

Keyin biz uni kvadrat fabrikamiz funktsiyasiga moslashtiramiz.

const kvadrat = (uzunlik) => {

const proto = {

uzunlik,

turi: 'Kvadrat',

maydon: (args) => Math.pow (args.length, 2)

}

const asoslari = shapeInterface (proto)



const kompozit = Ob'ekt .assign ({}, asoslari)

return Object.assign (Object.create (composite), {length})

}

Va kvadrat ishlab chiqarish funktsiyasini chaqirish natijasi keyingisi bo'ladi:



const s = square (5)

console.log ('OBJ \ n', s)

console.log ('PROTO \ n', Object.getPrototypeOf (s))

s.area ()

OBJ chiqishi

{uzunlik: 5}

PROTO

{turi: 'shapeInterface', maydon: [Funktsiya: maydon]}



Bizning maydonimizdagi "kalkulyator yig'indisi" usulida tasdiqlangan shakllar aslida shapeInterface turlari ekanligini tekshirishimiz mumkin , aks holda biz istisno qilamiz:

sum () {

const

area = [] for (this.shapes shakli) {



if (Object.getPrototypeOf (shape) .type === 'shapeInterface') {

area.push (shape.area ())

} else {

tashlang yangi Xato ('bu shapeInterface ob'ekti emas')

}

}

return area.reduce ((v, c) => c + = v, 0)



}

va yana, JavaScript, yuqoridagi misol biz modellashtirish interfeyslar ko'proq uni taqlid, lekin qanday qilib ko'rsatadi kiritgan tillarda kabi interfeysi uchun qo'llab-quvvatlash kerak emas, chunki, nima qilamiz yordamida hisoblanadi yopish va vazifasi tarkibini siz bilmagan bo'lsa bir nima yopish - bu maqola buni juda yaxshi tushuntiradi va to'ldirish uchun ushbu videoni ko'ring.




Download 23.54 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2022
ma'muriyatiga murojaat qiling