You are on page 1of 48

“Om Swastyastu”

Nama Kelompok :

I Gede Aditya Wahyudi Putra (07)

Jaka Wahyu Ramadhan (14)

Shavyera Christine Liubana (31)

Valgi Virnan Valian (33)


MATERI PRESENTASI

Pemodelan Konsep OOAD


Perangkat (Object Oriented
Lunak Analysis Design)
&
Cara
Mengoperasikanny
Konsep OOAD (Object Oriented
Analysisdan
Pengertian Design)
Konsep OOAD
Analisis dan disain berorientasi objek adalah cara baru dalam memikirkan
suatu masalah dengan menggunakan model yang dibuat menurut konsep
sekitar dunia nyata. Dasar pembuatan adalah objek, yang merupakan
kombinasi antara struktur data dan perilaku dalam satu entitas.
Pengertian “berorientasi objek” berarti bahwa kita mengorganisasi perangkat
lunak sebagai kumpulan dari objek tertentu yang memiliki struktur data dan
perilakunya.
Konsep OOAD mencakup analisis dan desain sebuah sistem dengan
pendekatan objek, yaiut analisis berorientasi objek (OOA) dan desain
berorientasi objek (OOD). OOA adalah metode analisis yang memeriksa
requirement (syarat/keperluan) yang harus dipenuhi sebuah sistem dari sudut
pandang kelas-kelas dan objek-objek yang ditemui dalam ruang lingkup
perusahaan. Sedangkan OOD adalah metode untuk mengarahkan arsitektur
software yang didasarkan pada manipulasi objek-objek sistem atau subsistem.
OOA (Object Oriented Analysis)
OOA mempelajari permasalahan dengan menspesifikasikannya atau
mengobservasi permasalahn tersebut dengan menggunakan metode
berorientasi objek. Biasanya analisa sistem dimulai dengan adanya dokumen
permintaan (requirement) yang diperoleh dari semua pihak yang
berkepentingan.
Dokumen permintaan memiliki 2 fungsi yaitu : memformulasikan kebutuhan
klien dan membuat suatu daftar tugas. Analisis berorientasi obyek (OOA)
melihat pada domain masalah, dengan tujuan untuk memproduksi sebuah
model konseptual informasi yang ada di daerah yang sedang dianalisis. Model
analisis tidak mempertimbangkan kendala-kendala pelaksanaan apapun yang
mungkin ada, seperti konkurensi, distribusi, ketekunan, atau bagaimana sistem
harus dibangun. Kendala pelaksanaan ditangani selama desain berorientasi
objek (OOD).
Hasil analisis berorientasi objek adalah deskripsi dari apa sistem secara
fungsional diperlukan untuk melakukan, dalam bentuk sebuah model
konseptual. Itu biasanya akan disajikan sebagai seperangkat menggunakan
kasus, satu atau lebih UML diagram kelas, dan sejumlah diagram interaksi.
Tujuan dari analisis berorientasi objek adalah untuk mengembangkan
model yang menggambarkan perangkat lunak komputer karena bekerja
untuk memenuhi seperangkat persyaratan yang ditentukan pelanggan.
UML (Unified Modeling Language) adalah sebuah bahasa yang
berdasarkan grafik/gambar untuk memvisualisasi, menspesifikasikan,
membangun, dan pendokumentasian dari sebuah sistem pengembangan
software berbasis OO (Object-Oriented). UML sendiri juga memberikan
standar penulisan sebuah sistem blue print, yang meliputi konsep bisnis
proses, penulisan kelas-kelas dalam bahasa program yang spesifik, skema
database, dan komponen-komponen yang diperlukan dalam sistem
software
OOD (Object Oriented Design)
OOD mengubah model konseptual yang dihasilkan dalam analisis
berorientasi objek memperhitungkan kendala yang dipaksakan oleh
arsitektur yang dipilih dan setiap non-fungsional – teknologi atau
lingkungan – kendala, seperti transaksi throughput, response time, run –
waktu platform, lingkungan pengembangan, atau bahasa pemrograman.

A. Karakteristik dari Objek


1. Objek
• Objek adalah benda secara fisik dan konseptual yang ada di sekitar kita.
Sebuah objek memiliki keadaan sesaat yang disebut state.
• Objek dapat kongkrit, seperti halnya arsip dalam sistem, atau
konseptual seperti kebijakan penjadwalan dalam multiprocessing
pada sistem operasi.
• Dua objek dapat berbeda walaupun bila semua nilai atributnya
identik.
2. Kelas Objek
• Kelas merupakan gambaran sekumpulan Objek yang terbagi dalam
atribut, operasi, metode, hubungan, dan makna yang sama.
• Suatu kegiatan mengumpulkan data (atribut) dan perilaku
(operasi) yang mempunyai struktur data sama ke dalam satu grup.
• Kelas Objek merupakan wadah bagi Objek. Dapat digunakan untuk
menciptakan Objek.
• Objek mewakili fakta/keterangan dari sebuah kelas.
B. Karakteritik Metodologi Berorientasi Objek
Metodologi pengembangan sistem berorientasi objek mempunyai tiga
karakteristik utama :
1. Encapsulation (Pengkapsulan)
• Encapsulation merupakan dasar untuk pembatasan ruang lingkup
program terhadap data yang diproses.
• Data dan prosedur atau fungsi dikemas bersama-sama dalam suatu
objek, sehingga prosedur atau fungsi lain dari luar tidak dapat
mengaksesnya.
• Data terlindung dari prosedur atau objek lain, kecuali prosedur yang
berada dalam objek itu sendiri.
2. Inheritance (Pewarisan)
• Inheritance adalah teknik yang menyatakan bahwa anak dari objek akan
mewarisi data/atribut dan metode dari induknya langsung.
• Atribut dan metode dari objek dari objek induk diturunkan kepada anak
objek, demikian seterusnya.
• Inheritance mempunyai arti bahwa atribut dan operasi yang dimiliki
bersama di anatara kelas yang mempunyai hubungan secara hirarki.
• Suatu kelas dapat ditentukan secara umum, kemudian ditentukan spesifik
menjadi subkelas. Setiap subkelas mempunyai hubungan atau mewarisi
semua sifat yang dimiliki oleh kelas induknya, dan ditambah dengan sifat
unik yang dimilikinya.
• Kelas Objek dapat didefinisikan atribut dan service dari kelas Objek lainnya.
• Inheritance menggambarkan generalisasi sebuah kelas.
3. Polymorphism (Polimorfisme)
• Polimorfisme yaitu konsep yang menyatakan bahwa seuatu yang
sama dapat mempunyai bentuk dan perilaku berbeda.
• Polimorfisme mempunyai arti bahwa operasi yang sama mungkin
mempunyai perbedaan dalam kelas yang berbeda.
• Kemampuan objek-objek yang berbeda untuk melakukan metode
yang pantas dalam merespon message yang sama.
• Seleksi dari metode yang sesuai bergantung pada kelas yang
seharusnya menciptakan Objek.
Pemodelan Berorientasi Objek

A. Pemodelan Sebagai Teknik Desain


Teknik pemodelan objek menggunakan tiga macam model untuk
menggambarkan sistem, diantaranya adalah sebagai berikut :
1. Model Objek
• Model objek menggambarkan struktur statis dari suatu objek dalam
sistem dan relasinya.
• Model objek berisi diagram objek. Diagram objek adalah graph dimana
nodenya adalah kelas yang mempunyai relasi antar kelas.
2. Model Dinamik
• Model dinamik menggambarkan aspek dari sistem yang berubah setiap
saat.
• Model dinamik dipergunakan untuk menyatakan aspek kontrol dari sistem.
• Model dinamik berisi state diagram. State diagram adalah graph dimana
nodenya adalah state dan arc adalah tarnsisi antara state yang disebabkan
oleh event.

3. Model Fungsional
• Model fungsional menggambrakan transformasi nilai data di dalam sistem.
• Model fungsional berisi data flow diagram. DFD adalah suatu graph dimana
nodenya menyatakan proses dan arcnya adalah aliran data.
B. Model Berorientasi Objek
Sebuah model objek menangkap struktur statis dari sistem dengan
menggambarkan objek dalam sistem, hubungan antara objek, serta
atribut dan operasi yang merupakan karakteristik setiap kelas dan
objek.
Model berorientasi objek lebih mendekati keadaan nyata, dan
dilengkapi dengan penyajian grafis dari sistem yang sangat bermanfaat
untuk komunikasi dengan user dan pembuatan dokumentasi struktur
dari sistem.
1. Objek dan Kelas
 Objek
• Objek didefinisikan sebagai konsep, abstraksi atau benda dengan
batasan dan arti untuk suatu masalah.
• Semua objek mempunyai identitas yang berbeda dengan lainnya.
• Istilah identitas berarti bahwa objek dibedakan oleh sifat yang
melekat dan bukan dengan uraian sifat yang dimilikinya.
• Contohnya : kembar identik, walaupun mereka nampak seperti sama,
tetapi merupakan dua orang yang berbeda.
• Kadang-kadang objek berarti suatu barang, maka digunakan istilah
object instance, dan object class untuk menunjukkan satu grup dari
barang yang sama.
 Kelas
• Suatu object class menggambarkan kumpulan dari objek yang
mempunyai sifat (atribut), perilaku umum (operasi), relasi umum
dengan objek lain dan semantik umum.
• Contoh : Orang, perusahaan , binatang, proses adalah objek.
• Setiap orang mempunyai umur, IQ, dan mungkin pekerjaan. Setiap
proses mempunyai pemilik, prioritas, list dari sumber daya yang
dibutuhkan.
• Objek dan object class sering sama sebagai benda dalam deskripsi
masalah.
2. Diagram Objek
Diagram objek melengkapi notasi grafik untuk pemodelan objek, kelas
dan relasinya dengan yang lain. Diagram objek bermanfaat untuk
pemodelan abstrak dan membuat perancangan program.

Kelas dan Objek


• Konsep fundamental dalam analisis berorientasi objek adalah objek
itu sendiri. Sebuah objek adalah sebuah entitas yang mencakup data
dan metode.
• Kelas merupakan satu atau lebih objek dengan persamaan atribut
dan metode, sedangkan kelas-&-objek adalah kelas dengan satu atau
lebih objek di dalamnya. Nama kelas adalah kata benda tunggal, atau
kata sifat dan kata benda. Nama dari kelas-&-objek harus dapat
menjelaskan objek tunggal dari suatu kelas.
Struktur Objek dan Hirarki Kelas
Struktur kelas dibagi dua macam, yaitu Whole-Part Structure dan Gen-Spec
Structure :
• Whole-Part Structure memperlihatkan hirarki dari suatu kelas sebagai
komponen dari kelas lain yang disebut juga sub objek. Contohnya, kelas Mobil
adalah Whole dan komponennya Mesin, Rangka, dan lain-lain, merupakan
Part1, Part 2, …, Part n.
• Gen-Spec Structure memperlihatkan kelas sebagai spesialisasi dari kelas di
atasnya. Kelas yang mempunyai sifat umum disebut Generalization, Superclass
atau Topclass, sedangkan kelas yang mempunyai sifat khusus disebut
Specialization.

• Contohnya, kelas Mobil adalah Generalization,


sedangkan Sedan, Truk, Minibus, dan lain-lain
merupakan Specizlization1, Specialization2, …,
Specialization n, yaitu kelas yang mempunyai sifat
khusus.
Atribut
• Atribut menggambarkan data yang dapat memberikan informasi mengenai
kelas atau objek dimana atribut tersebut berada.
 Metode
• Metode (method) disebut juga service atau operator adalah prosedur
atau fungsi seperti yang terdapat dalam bahasa Pascal pada
umumnya, tetapi cara kerjanya agak berlainan. Metode adalah
subprogram yang tergabung dalam objek bersama-sama dengan
atribut. Metode dipergunakan untuk pengaksesan terhadap data yang
terdapat dalam objek tersebut.
Pesan (Message)
• Message merupakan cara untuk berhubungan antara satu objek dengan objek
lain. Suatu pesan dikirimkan oleh suatu objek kepada objek tertentu dapat
digambarkan dengan anak panah.
Java
• Java adalah suatu teknologi di dunia software komputer, yang merupakan
• suatu bahasa pemrograman, dan sekaligus suatu platform. Sebagai bahasa
pemrograman, Java dikenal sebagai bahasa pemrograman tingkat tinggi.
Java mudah dipelajari, terutama bagi programmer yang telah mengenal
C/C++. Java merupakan bahasa pemrograman berorientasi objek yang
merupakan paradigma pemrograman masa depan.Sebagai bahasa
pemrograman Java dirancang menjadi handal dan aman. Java juga
dirancang agar dapat dijalankan di semua platform. Dan juga dirancang
untuk menghasilkan aplikasi – aplikasi dengan performansi yang terbaik,
seperti aplikasi database Oracle 8i/9i yang core-nya dibangun
menggunakan bahasa pemrograman Java.
• Sedangkan Java bersifat neutral architecture ,karena Java Compiler yang
digunakan untuk mengkompilasi kode program Java dirancang untuk
menghasilkan kode yang netral terhadap semua arsitekture perangkat
keras yang disebut sebagai Java Bytecode.
• Sebagai sebuah platform, Java terdiri atas dua bagian utama, yaitu:
• Java Virtual Machine (JVM).
• Java Application Programming Interface (JavaAPI).
Java Virtual Machine (JVM)
• JVM merupakan perangkat lunak yang dikembangkan secara khusus agar
terlepas dari ketergantungan atas perangkat keras serta sistem operasi
tertentu. JVM menyediakan lingkungan kerja yang dibutuhkan untuk
menjalankan aplikasi berbasis java serta mengotomatisasikan fitur-fitur
seperti penanganan kesalahan. JVM umumnya didistribusikan bersama
dengan seperangkat pustaka dasar yang mengimplementasikan antarmuka
pemrograman aplikasi java, Application Programming Interface' (API) yang
dinamai sebagai Java Runtime Environment (JRE).
• Program yang dieksekusi oleh JVM merupakan program berbasis bytecode
yang umumnya ditulis dan dikompilasi dengan menggunakan bahasa
pemrograman Java, namun saat ini bisa juga berasal dari bahasa
pemrograman lain seperti: Jython (Python), Groovy, JRuby (Ruby).
Mesin virtual java standarnya dibuat oleh Oracle, namun mesin-mesin virtual
java lainnya yang menggunakan merek dagang "JAVA" boleh dibuat oleh
perusahaan lain sejauh produk-produk tersebut tunduk pada spesifikasi yang
ditetapkan serta kesepakatan atas kontrak obligasi antara perusahaan pembuat
dengan Oracle.
Jenis-Jenis Bahasa Pemrograman
Contoh Coding java :

class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
Jenis Bahasa Pemrograman :
Clojure Groovy
Jython JRuby
Scala Fantom
Rhino Jacl
Clojure
Dirancang pertama kali oleh Rich Hickey, Clojure merupakan bahasa
pemrograman mirip Scheme dan Lisp yang berjalan diatas JVM. Tentu
saja dengan sintaksnya yang agak nyentrik ini Clojure memiliki peminat
yang cukup banyak di kalangan pengguna bahasa pemrograman
fungsional. Mulanya Rich Hickey menginginkan bahasa pemrograman
Lisp yang modern untuk functional programming. Rich juga
menginginkan ada sebuah fasilitas konkuren di dalam bahasa tersebut.
Maka saat itu Rich mengembangkan dotLisp, sebuah proyek Lisp yang
diimplementasikan diatas .NET Framework.
Tapi akhirnya Rich mengembangkan Clojure yang diimplementasikan
diatas JVM. Salah satu web framework terkenal yang dirancang
menggunakan Clojure adalah Noir. Berikut adalah contoh source
code Clojure :

(let [i (atom 0)]


(defn generate-unique-id
"Returns a distinct numeric ID for each call."
[]
(swap! i inc)))
Groovy
• Groovy adalah sebuah bahasa pemrograman dinamis yang mirip
dengan Python, Perl, Ruby, dan Smalltalk yang berjalan diatas Java.
Groovy dapat berinterkasi dengan library Java lainnya, serta dapat
menciptakan paduan antara Java dan Groovy. Groovy memiliki
sebuah web framework yang terkenal yaitu Grails. Groovy ini
dikembangkan oleh James Strachan. Groovy ini dikelola oleh sebuah
perusahaan bernama Pivotal. Jika Anda menggunakan Netbeans
pertama kali, Anda dapat melihat ada pilihan membuat aplikasi dengan
Groovy.Berikut ini adalah contoh source code Groovy :
class AGroovyBean {
String color
}

def myGroovyBean = new AGroovyBean()

myGroovyBean.setColor('baby blue’)
assert myGroovyBean.getColor() == 'baby blue’

myGroovyBean.color = 'pewter’
assert myGroovyBean.color == 'pewter'
Jython
• Jika Python yang aslinya diimplementasikan dalam bahasa C, maka
Jython tentu saja diimplementasikan diatas JVM. Jython dikompilasi
menjadi bytecode baru dapat dijalankan diatas JVM. Dengan Jython
Anda dapat mengakses library Java dan JVM seperti Swing, AWT, SWT,
dan lainnya. Beberapa library Python standard tidak dapat diakses di
Jython. Selain membangun aplikasi desktop, Anda dapat membangun
aplikasi web servlet dengan Jython.s Jython ini dikembangkan pertama
kali oleh Jim Hugunin, Barry Warsaw, Samuele Pedroni, Brian Zimmer,
dan Frank Wierzbicki. Berikut ini adalah contoh source code Jython :
from javax.swing import JButton, Jframe

frame = JFrame('Hello, Jython!',


defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
size = (300, 300)
)

def change_text(event):
print 'Clicked!’
button = JButton('Click Me!', actionPerformed=change_text)
frame.add(button)
frame.visible = True
JRuby
• JRuby dikembangkan oleh Charles Oliver Nutter dan Thomas Enebo.
Awalnya JRuby dikembangkan di Sun Microsystem tapi kmudian
berpindah ke Engine Yard pada tahun 2009. Pada Mei 2012, duo JRuby
tersebut pindah tempat ke Red Hat dan fokus mengembangkan JRuby
disana. Dua kontributor lainnya adalah Ola Bini dan Nick Sieger. Salah
satu keunggulan JRuby adalah adanya fitur multiple virtual machine
collaboration. Berikut ini adalah contoh source code JRuby :
require 'java’

frame = javax.swing.JFrame.new
frame.getContentPane.add javax.swing.JLabel.new('Hello,
World!’)

frame.setDefaultCloseOperation
javax.swing.JFrame::EXIT_ON_CLOSE
frame.pack
frame.set_visible true
Scala
• Scala merupakan bahasa pemrograman yang diklaim lebih sederhana
dibandingkan Java. Salah satu web framework terkenal dari Scala
adalah Lift dan Scalatra. Scala diciptakan oleh Martin Odersky karena
Martin menginginkan bahasa pemrograman fungsional
yang powerful yang dapat berjalan diatas JVM. Selain itu Martin terlibat
juga dalam pengembangan JVM bersama James Gosling dan tim
pengembang JVM lainnya. Berikut ini adalah contoh source code Scala :
// Scala
class Point(
val x: Double, val y: Double, addToGrid: Boolean = false
) {
import Point._

if (addToGrid)
grid.add(this)

def this() = this(0.0, 0.0)

def distanceToPoint(other: Point) =


distanceBetweenPoints(x, y, other.x, other.y)
}
object Point {
private val grid = new Grid() def distanceBetweenPoints(x1: Double,
y1: Double,
x2: Double, y2: Double) = {
math.hypot(x1 - x2, y1 - y2)
}
}
Fantom
• Sebuah bahasa pemrograman yang unik karena dapat berjalan diatas
JVM, .NET, dan Javascript. Bahasa pemrograman Fantom ini
dkembangkan oleh Brian dan Andy Frank. Selain itu Anda dapat
mengerjakan aplikasi lebih mudah karena Fantom dapat berjalan
diatas platform apapun. Berikut ini adalah contoh source code Fantom :
// Hello from Fantom!
class HelloWorld{
static Void main()
{
echo("Hello, World!")
}
}
Rhino
• Rhino adalah engine untuk Javascript yang dikembangkan oleh Mozilla
Foundation. Tentunya merupakan open source software. Rhino
dikembangkan sejak 1997 dan seluruhnya ditulis menggunakan bahasa
Java. Engine lainnya yang dimiliki oleh Mozilla yaitu SpiderMonkey yang
ditulis menggunakan C++. Rhino dapat menghasilkan java bytecode dari
kode Javascript yang ditulis untuk Rhino. Karena Javascript Rhino dapat
mengakses library Java, maka sangat mudah sekali untuk
mengintegrasikan Javascript dan Java dalam satu aplikasi dengan lebih
mudah. Berikut ini adalah contoh source code Javascript di Rhino:
// create Java String array of 5 elements
var a =
java.lang.reflect.Array.newInstance(java.lang.String, 5);

// Accessing elements and length access is by usual Java


syntax
a[0] = "scripting is great!";
print(a.length);
Jacl
• Jacl adalah TCL interpreter yang ditulis seluruhnya menggunakan Java. Jacl juga
dapat berkomunikasi antara Java interpreter dengan Tcl interpreter. Jacl ini hadir
agar dapat menyambungkan Tcl ke aplikasi Java yang sudah ada tanpa harus
melakukan usaha yang lebih banyak dalam merombak kode Tcl. Berikut ini adalah
contoh source code Jacl :
package require java
java::import org.eclipse.swt.internal.win32.OS
java::import org.eclipse.swt.internal.win32.TCHAR
set lpText [java::new {TCHAR int java.lang.String boolean} 0 "Hello,
Win32 API World!" true]
set lpCaption [java::new {TCHAR int java.lang.String boolean} 0 "Hello,
World" true]
java::call OS MessageBox 0 $lpText $lpCaption [java::field OS MB_OK]
JAVA APPLICATION PROGRAMMING INTERFACE (JAVA API)

Java API merupakan komponen-komponen dan kelas JAVA yang sudah


jadi, yang memiliki berbagai kemampuan. Kemampuan untuk menangani
objek, string, angka, dsb.
Java API terdiri dari tiga bagian utama:

• Java Standard Edition (SE), sebuah standar API untuk merancang aplikasi
desktop dan applets dengan bahasa dasar yang mendukung grafis, keamanan,
konektivitas basis data dan jaringan.
• Java Enterprose Edition (EE), sebuah inisiatif API untuk merancang aplikasi
serverdengan mendukung untuk basis data.
• Java Macro Edition (ME), sebuah API untuk merancang aplikasi yang jalan pada
alat kecil seperti telepon genggam, komputer genggam dan pager.
Beberapa fitur yang ditawarkan Java API yang digunakan oleh user yang
berkecimpung di dunia java :

1. Applet
2. Java Networking
3. Java Database Connectivity (JDBC)
4. Java Server Pages (JSP)
5. Java Card
1. Applet
• Java Applet merupakan program Java yang berjalan di atas browser. Penggunaan applet
ini akan membuat halaman HTML lebih dinamis dan menarik.
2. Java Networking
• Java Networking merupakan sekumpulan Application Program-ming Interface (API) yang
menjadikan fungsi-fungsi untuk aplikasi-aplikasi jaringan. Java Networking menyediakan
akses untuk TCP, UDP, IP Address dan URL, tetapi tidak untuk ICMP dikarenakan alasan
sekuriti.
3. Java Database Connectivity (JDBC)
• JDBC API terdiri atas class dan interface yang ditulis dalam bahasa Java untuk sebagai
alat bantu bagi pembuat program (developer ) dan menyediakan sekumpulan API untuk
mengatur keamanan mengakses database seperti Oracle, MySQL, PostgreSQL, Microsoft
SQL Server. Jadi keunggulan API JDBC dapat mengakses sumber data dan berjalan pada
semua Platform yang mempunyai Java Viortual Machine (JVM).
4. Java Server Pages (JSP)
• JSP adalah suatu teknologi web berbasis bahasa pemrograman Java dan berjalan pada
platform Java. JSP merupakan engembangan dari Servlet serta merupakan bagian dari
teknologi Java 2 Platform, Enterprise Edition (J2EE).
5. Java Card
• Platform yang ada pada JAVA dikembangkan oleh yang namanya Java Community
Process (JCP). JCP didirikan pada tahun 1998, merupakan suatu proses formal yang
memungkinkan pihak-pihak yang tertarik untuk terlibat dalam mengembangkan versi
dan fitur dari platform JAVA tersebut. Di dalam JCP terdapat yang namanya Java
Specification Request’s atau JSRs. JSRs adalah kumpulan dokumen formal yang
menggambarkan spesifikasi dan teknologi yang diusulkan oleh orang-orang yang terlibat
dalam JCP untuk melakukan penambahan fitur-fitur yang terdapat pada platform JAVA
tersebut.
Any
Question
??

You might also like