Nesne Yönelimli Programlama Vize – Final Hazırlık Soruları / Ruby
Merhabalar arkadaşlar bu yazımda sizlere nesne yönemli programlama ders notlarımdan ve derlediğim sorulardan hareketle sınavlarınızda yardımcı olabilmesi için test soruları ve denemelerim sonucunda elde ettiğim olası çıktıları vermeye çalıştım. Nesne yönelimli programlama dersi ile ilgili yer alan sorular Ruby programlama dili ile yazılmış olup sizler için öğretici olacaktır. Umuyorum bu Ruby Test soruları birileriniz için işe yarayacaktır. Şimdiden kolay gelsin başarılar.
Sorular
1) class Okul
attr_reader :okulad, :okulid //attr_accessor olsaydı çıktı=55000 olurdu
def initialize okulad, okulid
@okulad, @okulid = okulad, okulid
end
end
omu = Okul.new “OMU” , 55
omu.okulid = 55000
puts omu.okulid
çıktı: hata verir
2)class Foo
attr_accessor :bar //global değişkenler $ ile gösterilir.
$baz = 0
@@count = 0 //örnek değişkenler @ ile gösterilir.
def initialize bar //sınıf değişkenleri @@ ile başlar.
@bar = bar
end
puts bar
end
baz = Foo.new 5
çıktı:hata verdiği görülmüştür.
3)class Foo
def initialize(bar)
@bar=bar
end
def bar=(bar) //attr_accessor yerine geçen bir kullanımdır.
@bar=bar
end
def bar
@bar
end
end
baz = Foo.new “Ruby”
baz.bar = “Java”
puts baz.bar
Çıktı:java olur
4)require ‘ostruct’
class Kisi
attr_accessor :ad, :gün, :ay, :yil
def initialize (opts = {})
@ad,@gün,@ay,@yil =opts[:ad],opts[:gün],opts[:ay],opts[:yil]
end
def isimbul bilgi
if @ad.size > bilgi.ad.size
@ad
else
bilgi.ad
end
end
def yilbul bilgi
if @yil>bilgi.yil
@yil
else
bilgi.yil
end
end
end
bilgi1 = OpenStruct.new(:ad => “Ali”, :gun =>1, :ay =>11, :yil => 2011)
bilgi2 = OpenStruct.new(:ad => “Ahmet”, :gun => 10, :ay => 1, :yil => 2008)
a=Kisi.new bilgi1
b=Kisi.new bilgi2
print a.isimbul b
print b.yilbul a
Çıktı:Ahmet2011 olur.
5)class Foo
attr_reader :bar,:baz
def initialize bar,baz
@bar,@baz =bar,baz
end
def degistir x,y
bar,baz=x,y
end
end
nesne=Foo.new 10,20
nesne.degistir 30,40
puts nesne.bar + nesne.baz
çıktı:30
6)class Futbolcu
attr_accessor :yas,:mevki
def initialize yas,mevki
@yas,@mevki = yas,mevki
end
end
insanlar =[]
insanlar << Futbolcu.new(25,’kaleci’)
insanlar << Futbolcu.new(30,’defans’)
insanlar << Futbolcu.new(35,’forvet’)
insanlar << Futbolcu.new(20,’ortasaha’)
insanlar << Futbolcu.new(22,’kanat’)
i=0
while i< insanlar.size
if insanlar[i].mevki.length > 5
insanlar[i].yas=insanlar[i].yas – insanlar[i].mevki.length
end
i +=1
end
puts insanlar[2].yas.to_s
Çıktı:29
7)class Foo
def initialize(x)
$dizi << x
end
def bar (dizi)
baz=0
dizi.each {|e| baz+= e}
baz
end
end
$dizi=[]
%w(1 2 3 4 5).each do |n|
$f=Foo.new n.to_i
end
p $f.bar $dizi
çıktı:15
8)class Box
def initialize (w,h)
@width,@heigth = w,h
end
def getArea
@area=@width/@heigth
“big box area is: #@area”
end
end
class BigBox < Box
def getArea
end
end
box=BigBox.new(20,10)
p box.getArea
çıktı:nil
9)class Point
attr_reader :x,:y
def initialize (x,y)
@x,@y=x,y
end
def foo other
@h=Math.sqrt(((self.x-other.x).abs)**2+((other.y-self.y).abs)**2)
end
def to_s
“#{@h}”
end
end
p1=Point.new(1,5)
p2=Point.new(4,9)
p1.foo(p2)
puts p1
çıktı:5.0
10)class Foo
attr_accessor 😡
def bar gelen
@x>gelen.x
end
end
a=Foo.new
b=Foo.new
a.x,b.x= 5,7
p a.bar b
çıktı:false
11)require ‘forwardable’
class Foo
extend Forwardable
def_delegators :@bar,:'<<‘,:length,:map
attr_writer :bar
def initialize
@bar=[]
end
end
a=Foo.new
a<<3
a<<a.length
a<<55
a<<a.length
a=a.map{|e| e*2}
puts a[-2]
çıktı:110
12)class Foo
def initialize(bar,baz)
@bar,@baz=bar,baz
end
def quux
@baz.reverse
end
end
qux=Foo.new(“Lorem”,”Ipsum”)
puts qux.quux
çıktı:muspI
13)class Anne
def bilgi
p “Anne”
end
end
class Cocuk < Anne
def bilgi
super
p “Cocuk”
end
end
foo=Cocuk.new
foo.bilgi
çıktı:anne
cocuk
14)class Islem
def initialize(a,b)
@a,@b=a,b
end
private
def Topla
return @a+@b
end
def Carp
return @a*@b
end
public
def Ekranayaz
puts “Topla: #{Topla()}”
puts “Carp: #{Carp()}”
end
end
islem=Islem.new(5,3)
islem.Ekranayaz
çıktı:topla:8
çarp:15
15)class Kisi
def initialize(ad,soyad)
@ad,@soyad=ad,soyad
end
def selam
puts “merhaba ben #{@ad.capitalize} #{@soyad.upcase}”
end
end
class Muhendis < Kisi
def initialize(ad,soyad,meslek)
super(ad,soyad)
@meslek=meslek
end
def selam
puts “#{super} #{@meslek.capitalize} okuyorum.”
end
end
muhendis=Muhendis.new(“zeynep”,”kucuk”,”bilgisayar muhendisligi”)
muhendis.selam
çıktı:merhaba ben Zeynep KUCUK
Bilgisayar mühendisliği okuyorum
16)class Area
class << self
def calculate(width, height)
width * height
end
end
end
puts Area.calculate(5, 5)
çıktı:25
17)class Saat
attr_reader :saat, :dakika, :saniye;
def initialize saat = 23, dakika = 0, saniye = 0
@saat,@dakika,@saniye = saat,dakika,saniye
end
def to_s
<<-HERE
Saat #{saat} – #{dakika} – #{saniye}
HERE
end
end
s=Saat.new
puts s.to_s
s1=Saat.new(23,1,10)
puts s1.to_s
çıktı:Saat 23-0-0
Saat 23-1-10
18) class Bolum
attr_reader :isim
$liste=[]
def initialize(is)
@isim=is
puts @isim
end
def kisi_ekle(isim)
$liste<<(isim)
end
def kisiler()
puts $liste
end
end
bolum=Bolum.new “Bilgisayar Muh”
bolum.kisi_ekle “Erd”
bolum.kisi_ekle “Gokhan”
bolum.kisiler
çıktı:bilgisayar Muh
zeynep
Gulcin
19)$degisken = ” ”
class Sınıf1
def initialize
$degisken += “anne”
end
end
class Sınıf2 <Sınıf1
def initialize
super
$degisken +=”cocuk”
end
end
nesne=Sınıf2.new
p $degisken
çıktı : “annecocuk”
20)class A
@@a1 = 20
@@a2 = 10
def self.a1
@@a1
end
class << self
attr_accessor :a2
end
end
class B < A
@@a1=60
@a2=30
def self.a1
@@a1
end
class << self
attr_accessor :a2
end
end
p A.a1
p A.a2
p B.a1
p B.a2
çıktı:60
nil
60
30
21)def sorgu dizi
s = dizi.length
i = 0
d = []
while i < s
d << dizi[i] if dizi[i] < dizi[s/2]
i += 1
end
d
end
liste = [5, 35, 40, 20, 10, 6, 29]
puts “#{sorgu(liste)}”
çıktı: [5,10,6] 20 tan küçük olanları ekliyor listeye
22)def foo(dizi, l, r, a)
if r >= l
ort = r + (l – r) / 2
if dizi[ort] == a
ort
elsif dizi[ort] > a
foo(dizi, l, ort – 1, a)
else
foo(dizi, ort + 1, r, a)
end
end
end
dizi=[1, 0, 10, 17, 33, 55, 34, 3]
dizi = dizi.sort
puts foo(dizi, 0, dizi.length – 1, 33)
çıktı:5
23)def foo sayi
bar = “”
while sayi >= 1
kalan = (sayi%2).to_s
bar = bar + kalan
sayi = sayi / 2
end
bar.reverse
end
dizi = %w(ruby java c python)
i = 0
j = “”
while i < dizi.length
j = j +foo(dizi[i].length)
i += 1
end
puts j
çıktı:1001001110
24)x = 7 //burada bize sorulan çıktının 4 olması içim x ne olmalı x>6
if x > 3
if x <= 5
y = 9
elsif x != 6
y = 4
else
y = 6
end
elsif x < 0
y =7
else
y = 5
end
puts y
çıktı=4
25)def foo cümle
dizi = cümle.split()
i = 0
bar = dizi[i].length
while i < dizi.length
bar = dizi[i].length if bar < dizi[i].length
i += 1
end
bar
end
puts foo “ondokuz mayıs university departmant of computer engineering Samsun Atakum”
çıktı:11
26)while nil
puts “Bu ruby cok eglenceli”
while nil
puts “Bu ruby cok eglenceli”
end
end
puts “Bu ruby cok eglenceli”
çıktı:Bu ruby cok eglenceli
27)sayilar = [-1,0,1]
ort = (sayilar[0] + sayilar[1] + sayilar[2])/3
if ort=sayilar[1]
puts sayilar[1]
elsif
puts sayilar[2]
end
çıktı:0
28)def foo n //soru a ve b yerine ne yazılırsa çıktı 35 olur a=7 b=4
if n == 0
1
else
n * foo(n-1)
end
end
a,b = 7,4
p foo(a) / (foo(b) * foo(a-b))
çıktı:35
29)class Foo
ORIGIN = 0,0
@@population =0
def initialize(x,y)
@x ,@y = x,y
end
def self.ORIGIN
new(*ORIGIN)
end
@@population +=2
puts @@population
puts new(*ORIGIN)
end
çıktı: 2
#<Foo:0x007ffc6c87ffa8> olur
30)class Foo
def initialize (bar,baz)
@bar,@baz = bar,baz
end
def quux
@baz.reverse
end
def quuux
@bar.reverse
end
end
qux = Foo.new(“lorem”,”Ipsum”)
puts qux.quux
puts qux.quuux
çıktı:muspI
merol
31)class Zeynep
attr_accessor :a,:b
def initialize (a,b)
@a=a
@b=b
end
end
a= Zeynep.new(1,2)
print a.a
print a.b
çıktı:12 olur
32)class Zeynep
attr_reader :a,:b
def initialize(a,b)
@a=a
@b=b
end
def a=(param)
@a=param
end
end
a=Zeynep.new(1,2)
a.a=10
print a.a
print a.b
çıktı:102 olur
33)class Zeynep
@@b=10
def self.b
@@b
end
end
class Sen < Bilal
@@b = 1645
def self.b
@@b
end
end
a=Zeynep.new
print Zeynep.b
çıktı:1645
34)class Zeynep
attr_accessor :a
@@b = 10
@c = 15
def initialize(a)
@a=a
end
def self.b
@@b
end
def self.c
@c
end
end
a = Zeynep.new(1)
p a.a
p Zeynep.b
p Zeynep.c
çıktı:1
10
15
35)class Zeynep
@@b = 10
@c=15
class << self
attr_accessor :c
def b
@@b
end
end
end
class kucuk < Zeynep
@@b=20
@c=60
class << self
attr_accessor :c
def b
@@b
end
end
end
a =Zeynep.new
b= kucuk.new
p Zeynep.b
p Zeynep.c
p kucuk.b
p kucuk.c
çıktı:20 15 20 60
36)class Zeynep
attr_accessor :a,:b
def initialize(a,b)
@a=a
@b=b
end
end
class Kucuk < Zeynep
def metod
puts “metod burası”
end
end
a=Zeynep.new(1,2)
puts a.a
puts a.b
çıktı:1
2
37)class Bilal
attr_accessor :a,:b
def initialize(a,b)
@a=a
@b=b
end
end
class Kucuk < Zeynep
def metod
puts metod
puts “metod gövdesi”
end
def to_s
puts @a
puts @b
end
end
a = Kucuk.new(3,5) //puts a.a a.b yazmak yerine to_s ile yazdırırz
a.to_s
çıktı=3
38)$global = “”
class Bilal
def initialize
$global += “Zeynep”
end
end
class Kucuk < Zeynep
def initialize
$global += “Kucuk”
end
end
a = Kucuk.new //Zeynep.new olsaydı çıktı Zeynep olurdu
p $global
çıktı=Kucuk olur
39)koda göre kaç tanesi doğrudur
class Foo
attr_reader :a,:b,:c
@@d=0
def initialize a,b,c
@@d +=1
end
def self.say
@@d
end
end
1)veri sarmalama yoktur
2)sınıf değişkeni vardır
3)sınıf metodu vardır
4)self anahtar kelimesi yerine sınıf adı yazılabilir.
Cevap:2 3 4 diyorum 3 tanesi yani
40)koda göre hangileri doğrudur
class Hayvan
end
class Kus < Hayvan
end
class Papagan < Kus
end
1)papagan bir kuştur ve kuş bir hayvandır
2)papagan bir hayvandır
3)papağan hayvan sınıfındaki metotları kullanamaz
4)papağan yalnızca kuş sınıfındaki metodu kullanabilir
5)papağan hem hayvan hem de kuş sınıflarındaki metotları kullanabilir.
cevap:1 2 ve 5 diyorum
41)koda göre işaretli satırda ne olmalıdır
class Cember
attr_accessor :yaricap
def initialize r
@yaricap=r
end
def +(diger)
……
end
end
c1=Circle.new 5
c2=Circle.new 6
c3 = c1 + c2
A)@yaricap +diger.yaricap
B)@yaricap + diger.@yaricap
C)CEmber.new @yaricap+diger.yaricap
D)hiçbiri
E)yaricap+diger.yaricap
cevap :hicbiri diyorum
42)koda göre hangileri doğrudur?
class Point
attr_reader :x,:y
def initialize (x,y)
@x,@y=x,y
end
def foo other
@h=Math.sqrt(((self.x-other.x).abs)**2+((other.y-self.y).abs)**2)
end
def to_s
“#{@h}”
end
end
p1=Point.new(1,5)
p2=Point.new(4,9)
p1.foo(p2)
puts p1
1)ekrana 5.0 yazar
2)puts p1 satırı çalıştığında önce global to_s aranır
3)foo metodunun içindeki self p1 nesnesinin değerini alır
4)foo metodunun içindeki self p2 nesnesinin değerini alır
5)ekrana karekök 14 ün değerini yazar
Cevap : 1 ve 3 diyorum ama emin değilim.
43)kodda görülen @bar için aşağıdakilerden hangisi doğrudur.
class Foo
@bar = 0
def initialize(a)
@a=a
end
end
A)sınıf nesnesi değişkenidir
B)lokal(yerel)değişkendir
C)nesne niteliğidir
D)global(genel) değikendir
E)sınıf değişkenidir
Cevap:A diyorum emin değilim.