Sayfa:  1  2  3 ... 9  10  11  sonraki 

Mesajlarını aradığınız kullanıcı: İbrahim (156)

konu: SVG Formatındaki Resmi Nasıl İşleyebilirim?  ; forum:: Diğer Konular
İbrahim #1
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aslında yapmak istediğim şunun aynısı: http://dnomak.com/svg-turkiye-haritasi/ (GitHub bağlantısı da mevcut).
Yani bu şekilde elimde svg haritası var ben bu resmi direk kullanabilir miyim, yoksa ekrana tekrar mı çizdirmem gerekli? Yapacağım tek şey haritamın üzerindeki ülkelere fareyi getirdiğimde ülke adını vermesi.
konu: SVG Formatındaki Resmi Nasıl İşleyebilirim?  ; forum:: Diğer Konular
İbrahim #2
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: SVG Formatındaki Resmi Nasıl İşleyebilirim?
Selamün Aleyküm;
Benim elimde dünya haritası olan bir svg resmi var. Ben bu ülkelerin üzerine fare ile gelip ülkeye tıklayınca o ülkenin adını almak istiyorum. Bunu esasında Qt ile yapacağım ama sadece mantığını öğrenmek istiyorum. Image nesnesini kullanarak direk olarak resmi gösterek bu işlemi yapabilir miyim? Yoksa o svg dosyasının içerisinde bulunan 'path' değerlerini okuyarak tekrardan form üzerine haritayı çizdirerek mi yapabilirim?
Elimdeki svg dosyasında şöyle bir path kısmı var:
[Resim: https://s1.postimg.org/3hwk9ibe5b/img.png]
Bu 'd' özelliğinde görüldüğü üzere haritanın bir ülkesi için koordinat değeri var. Ben bu ve diğer path değerlerindeki koordinatları okuyarak tekrar çizdirerek mi bu işlemi yapabilirim yoksa zaten elimde olan svg resmini direk Image nesnesiyle ekranda göstererek bu işlemi yapabilir miyim? Qt'da şöyle bir şey buldum: http://doc.qt.io/qt-5/qml-qtquick-pathsvg.html
Lakin bunu nasıl işleme sokacağımı bilmiyorum :)
konu: Bir proje geliştirilirken algoritma geliştirme aşaması  ; forum:: Diğer Konular
İbrahim #3
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12945
Bu deneyimle de çok ilgili, değil mi? Evet, kafamda bir çok yöntem düşündüğüm oluyor ama bunların çoğunu önceki deneyimlere göre eliyorum.
Normalde aklımıza bin bir kıstas getirerek kodladığımızdan her satırın üzerinden geçemem ama bana ikisi de çok garip geldi çünkü std:string'lerle oynuyorlar. Ben olsam giriş string'ini Saat diye bir struct oluşturmak için kullanır ve o nesneyi 24 saat düzeninde yazdırırdım.

Belki de öyle yapmalarının önemli bir nedeni vardır. O zaman koda bir açıklama satırı eklemeleri iyi olurmuş. Ama doğrusu, ikisi de bana rahatsız edici geldi. :)
Aslında bu saat sorusu HackerRank'e ait: https://www.hackerrank.com/challenges/time-conversion
Orada da illaki std::string kullanın denmemiş fakat editörde hazır std::string olduğu için sanırım C++ kısmında herkes de std::string kullanmış. İlk iletimde verdiğim 2 koddan ilki de bana ait :). O kodda da olduğu gibi ben çok basit şekilde düşündüm. Kısaca std::string'i  al, saat, dakika, saniye ve saat biçimi olarak parçala ve gerekli işlemi yap. Neden olduğunu bilmiyorum ama ben sanki hep algoritmanın en kolay ve acemice olan tarafını düşünüyorum :). Diğer kodlamalara baktığımda çok ilginç şeyler görüyorum ve sanki benim yazdığım kod o kişilerinkinin yanında acemice duruyor gibi geliyor. Mesela bana bir dizi karakterle ilgili işlem yap deseler aklıma ilk olarak o karakter dizisini "dizinin 0. elemanını al, 1. elemanını al ..." şeklinde parçalamak geliyor. Ve bilmiyorum ama sanki o dizi sanki parçalanmadan işlem yapılamazmış gibi hissediyorum. Ardından bu, dilin özelliklerini yeterince iyi bilmediğim için mi oluyor bilemiyorum. Aynı şekilde bir asal sayı bulan algoritma yapmaya çalıştığımda aklımdan geçen ilk ve temelde hep aynı olan şey o sayıyı asal çarpanlarına bölerek bulmak geliyor ve tabii ki de bunun için bir for döngüsü gerekli diyorum. Görüldüğü üzere nedense algoritma oluştururken aklıma en acemice yollar geliyor. Ya da bilmiyorum bana mı acemice geliyor.
Bir de siz o örnek için "std::string ile oynuyorlar" diyerek algoritmaları garip bulmuşsunuz. Ardından da "struct oluşturup o nesneyi de 24 saat düzeninde yazdırırım" demişsiniz. Aslında burada merak ettiğim 24 saat düzenine çevirirken nasıl bir algoritma kurulacağı. Acaba siz de mi özünde string'leri parçalayacaksınız? :)
konu: Bir proje geliştirilirken algoritma geliştirme aşaması  ; forum:: Diğer Konular
İbrahim #4
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Bir proje geliştirilirken algoritma geliştirme aşaması
Selamün Aleyküm;

İş yerlerinde çalışan veya ekiple geliştirilen projelerde çalışan yazılımcı arkadaşlara soruyorum. Bir iş yerinde proje için istenilen algoritma ne kadar sürede hazırlanmalı? Yani projede sizden bir bölümün algoritmasının hazırlanması ve kodlanması istenildiğinde o algoritmayı ne kadar sürede tamamlamanız gerekiyor? Bunun için sizden bir süre isteniyor mu? Algoritmayı geliştirmeniz için ne kadar süre harcıyorsunuz? Tabii ki de bunlar aslında göreceli kavramlar ama merak ettiğim şey basit algoritmalar (mesela girilen 12li AM/PM saat formatını 24lü saat formatına dönüştürme gibi) için bile uzun uzun, belki de saatlerce düşündüğünüz oluyor mu? Ben bir sitedeki bu saat dönüştürme algoritmasını hazırlıyordum ve gerçekten böyle basit bir algoritma için 2 - 2,5 saat düşündüm, nasıl yapayım diye. Aslında çok kolay ama aşırı gereksiz kod olmasın diye kısa yolları da düşündüm. Merak ettiğim iş yerlerinde daha zor algoritmalar istenecektir, bunları ne kadar sürede ve ne kadar efor sarfederek geliştiriyorsunuz? İş yeri bu algoritma için size süre tanıyor mu? Diyelim ki algoritmayı geliştiremedik, sonucu ne olur? İş yeri zarara girer mi? Bir de iyi düşünülmüş algoritmalar benzeri tanımlar yapılıyor, bir algoritmanın beğenilecek ve iyi olacak seviyede olmasına nasıl karar veriliyor?
Mesela şu 2 koddan hangisi neye göre daha iyidir?:

#include <iostream>
#include <string>
using namespace std;
 
std::string time_conversion(const std::string& time)
{
  // We can parse time as "hh", ":", "mm", ":", "ss", "AM/PM"
  std::string hh, mm, ss, format, format24hours("");
  hh.assign(time, 0, 2);
  mm.assign(time, 3, 2);
  ss.assign(time, 6, 2);
  format.assign(time, 8, 2);
 
  int h = stoi(hh),
      m = stoi(mm),
      s = stoi(ss);
 
  if (format == "AM")
  {
    if (0 <= h && h <= 12)
      format24hours += (h < 12) ? ((h < 10) ? "0" : "") + std::to_string(h)
                                : ((h == 12) ? "0" : "") + std::to_string(h - 12);
    format24hours += ":";
    if (0 <= m && m <= 59)
      format24hours += ((m < 10) ? "0" : "") + std::to_string(m);
    format24hours += ":";
    if (0 <= s && s <= 59)
      format24hours += ((s < 10) ? "0" : "") + std::to_string(s);
  }
  else if (format == "PM")
  {
    if (0 <= h && h <= 12)
      format24hours += std::to_string((h + 12 >= 24) ? (h % 24) : h + 12);
    format24hours += ":";
    if (0 <= m && m <= 59)
      format24hours += ((m < 10) ? "0" : "") + std::to_string(m);
    format24hours += ":";
    if (0 <= s && s <= 59)
      format24hours += ((s < 10) ? "0" : "") + std::to_string(s);
  }
 
  return format24hours;
}
 
int main()
{
  std::string time;
  cin >> time;
  std::string result(time_conversion(time));
  cout << result << endl;
 
  return 0;
}

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
 
int main() {
    string s;
    string h;
    int hr;
    cin>>s;
    hr = ((s[0]-'0')*10)+(s[1]-'0');
    if(s[8]=='P'&&s[9]=='M'&& hr ==12) cout<<to_string(hr);
    else if(s[8]=='P'&&s[9]=='M') cout<<to_string(hr+12);
    else if(s[8]=='A'&&s[9]=='M'&&hr==12) cout<<"00";
    
    else cout<< s[0]<<s[1];
    
   
    for(int i =2;i<8;i++)
        cout<<s[i];
    cout<<endl;
    return 0;
}
Teşekkürler.
konu: GitHub Varolan Respository (Depo) İçine Başka Proje Atmak  ; forum:: Diğer Konular
İbrahim #5
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: GitHub Varolan Respository (Depo) İçine Başka Proje Atmak
Selamün Aleyküm;

GitHub'da ABC adında bir repository var ve bunun içince A adında bir Android Studio projesi var. Ben aynı şekilde bir B projesi oluşturup yeni bir repository oluşturmadan bu B projesini de ABC deposuna atmak istiyorum, bunu nasıl yapabilirim?

Depo ağacı şöyle olacak:
ABC deposu (repository)
       |
       |__A projesi
       |
       |__B projesi

Teşekkürler.
konu: C++'ın Hangi Sürümüne Göre Yazılım Geliştirmeliyiz?  ; forum:: Diğer Konular
İbrahim #6
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C++'ın Hangi Sürümüne Göre Yazılım Geliştirmeliyiz?
Selamün Aleyküm;

Bildiğiniz üzere C++'ın 11, 14 ve 17 (hatta 2020'de C++20 çıkacakmış) sürümleri mevcut. Facebook, Google, The Qt Company gibi bazı şirketlerin GitHub'daki kodlarına bakınca C++'ın 11 sürümüne uygun kodlar yazdıklarını gördüm. Yani C++ 14 ve 17 standartlarını kullanmamışlar. Acaba biz de yazılımlarımızı hangi sürümü baz alarak geliştirmeliyiz? Yoksa sadece bana kalsa en son sürüme göre geliştiririm :). Teşekkürler!
konu: Heap Bölgesinde Tutulan Nesneler İçin Operatörleri Aşırı Yükleme Olmamalı Mı?  ; forum:: Diğer Konular
İbrahim #7
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12873
@kerdemdemir cevabınız için teşekkür ederim.
Object Pascal operatör aşırı yüklemeyi kayıtlarda sonuna kadar destekliyor. Fakat Object Pascal’da sınıflar heap tarafında olduğu için Object Pascal geliştiricileri sınıflarda operatör aşırı yüklemenin olmasının bellek taşmalarına sebep olacağını söylüyorlar. Ben bunu basit bir şekilde şöyle anlatayım:
Yine TExample adında bir sınıfımız olsun ve bu sınıfın static olan swap adlı bir üye fonksiyonu olsun:

class TExample
{
private:
  Int _num;
public:
  static void swap(TExample obj0, TExample obj1) const
  {
TExample tmp = obj0;
obj0 = obj1;
obj1 = tmp;
  }
};

Bu üye fonksiyonda (swap) herhangi bir bellek taşması olmaz. Çünkü tüm veriler stack’da olduğu için oluşturulan tmp bu üye fonksiyon işini yapınca otomatik olarak silinecek.
Ama Object Pascal’da swap şöyle kodlanması gerekiyor:

class procedure TExample.swap(obj0, obj1: TExample);
Var
  tmp: TExample;
Begin
  tmp := TExample.Create; // -> Bunun C++ karşılığı TExample* tmp = new TExample;
  tmp := obj0;
  obj0 := obj1;
  obj1 := tmp;
End;

Bu swap metodunda ise bellekten yer alındığı için bu metot işi bitince bile tmp nesnesini otomatik silmeyecek. İşte bu yüzden dolayı sınıflarda operatör aşırı yükleme sakıncalıdır denildiği için koyulmamış. Lakin bana bu tuhaf geliyor. Farkedersiniz ki swap aslında sadece bir üye fonksiyon, yani üye fonksiyon içinde de bellek taşması oldu ve bu swap fonksiyonunu herhangi bir operatörü aşırı yükleyerek de yapabiliriz. O zaman da bellek taşması olacak. Peki o zaman bir operatör fonksiyonu ile normal bir üye fonksiyon arasında kod olarak hiçbir fark yok. Bellek yünetimi varsa bu da bizim elimize bırakılmış. Programcı istediği gib hükmeder. Anlatmak istediğim operatörlerin aşırı yüklenmesinin hatalara yol açabileceği değil de Object Pascal’da record’larda bunu kullanabiliyorken sınıflarda bellek taşmasına sebep olabiliyor diye bunu kullanmamıza izin verilmemesi.
konu: Heap Bölgesinde Tutulan Nesneler İçin Operatörleri Aşırı Yükleme Olmamalı Mı?  ; forum:: Diğer Konular
İbrahim #8
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Heap Bölgesinde Tutulan Nesneler İçin Operatörleri Aşırı Yükleme Olmamalı Mı?
Selamün Aleyküm;

C++'da sınıflar ve yapılar stack bölgesinde tutulurlar fakat Object Pascal'da sınıflar heap bölgesinde, kayıtlar (record) ise stack bölgesinde tutulurlar. Bu yüzden de Object Pascal'da bir sınıftan bir nesne oluşturduğumuzda bellek yönetimini kendimiz yapmalıyız:
type
  TExample = class
  ...
  end;
 
var
  example: TExample;
begin
  example := TExample.Create; // -> Heap bölgesinde tutuluyor.
end.
Eğer bu nesneyi bellekten silmezsek bellekte hala yer işgal ettiğini görebiliriz:
Not: C++ için GCC, Object Pascal için de Free Pascal kullanıyorum.
Heap dump by heaptrc unit
1 memory blocks allocated : 8/8
0 memory blocks freed     : 0/0
1 unfreed memory blocks : 8
True heap size : 32768
True free heap : 32608
Should be : 32632
Call trace for block $00007F471EF730C0 size 8
(Derleme komutu: fpc -gh test.pas)

Şimdi asıl konumuza gelecek olursak, C++'da sınıflarda operatörleri aşırı yükleme olayını kullanabiliyoruz. Lakin Object Pascal ve Delphi'de sınıflarda operatörleri aşırı yükleme yapamıyoruz, sadece kayıtlarda (record) yapabiliyoruz. Neden sınıflar için operatör aşırı yükleme olmadığına dair şurada açıklama yapmışlar: https://stackoverflow.com/questions/2090472/why-isnt-opera…

Delphi'de sınıflarda operator overloading olmasının şu nedenlerden ötürü zararlı olacağını söylüyorlar:
Sınıflarda operator overloading olursa sürekli olarak hafıza sızıntılarına sebep olur. Örnek olarak:
type
  TExample = class
  private
    memberData: Integer;
  public
    class operator Add(obj: TExample; n: Integer): TExample;
  end;
 
  class operator TExample.Add(obj: TExample; n: Integer): TExample;
  begin
    Result := TExample.Create; // Yeni alan oluşturuyor.
    Result.memberData := obj.memberData + n;
  end;

Burada example0 := example1 + 5; gibi kullandığımızda + operatörünün yaptığı işlemlerde sürekli yeni alan oluşturuluyor ve bu alanlar silinmiyor. Yani kısaca bellek taşması oluşuyor.
diyorlar. Ama bu mantıksız değil mi? C++'da da şöyle yapabiliriz:
Example* example = new Example;
...
delete example; // -> Belleği geri verdik. 
Burada da C++ sınıfını heap bölgesinde tutuyor ve elimizle belleği iade etmemiz lazım. Örnek kod:
class Example
{
private:
  int _count;
public:
  Example();
  Example(int count);
  int getCount() const;
 
  Example operator+(int c);
};
 
Example::Example() : _count(0)
{
}
 
Example::Example(int count) : _count(count)
{
}
 
int Example::getCount() const
{
  return _count;
}
 
// + Operatörünü Aşırı Yüklüyoruz:
Example Example::operator+(int c)
{
  return Example(_count + c);
}
Kullanalım:
// Stack'de tutuluyor:
Example example(75);
example = example + 7;
cout << example.getCount() << endl;
 
// Heap'de tutuluyor:
Example* ex = new Example(75);
*ex = *ex + 7;
cout << ex->getCount() << endl;

Bu örneği Object Pascal'da record ile şöyle yapabiliyoruz:
type
  TExample = record
  strict private
    _count: Integer;
  public
    // record'da kurucu fonksiyonlar olmadığı için Getter ve Setter kullanıyoruz:
    function getCount: Integer;
    procedure setCount(count: Integer);
 
    class operator Add(obj: TExample; n: Integer): TExample;
  end;
 
function TExample.getCount: Integer;
begin
  Result := _count;
end;
 
procedure TExample.setCount(count: Integer);
begin
  _count := count;
end;
 
class operator TExample.Add(obj: TExample; n: Integer): TExample;
begin
  Result._count := obj._count + n;
end;
Kullanımı:
var
  example: TExample;
begin
  example.setCount(75);
  example := example + 7;
  WriteLn(example.getCount);
end.
Bunda sorun yok ama sınıflarda operator overloading'in bellek taşması sorunu oluşturacağını söylüyorlar ama bir Object Pascal sınıfına Java'da olduğu gibi toplama yapan bir metot da yazabiliriz:
function TExample.add(n: Integer): TExample;
begin
  Result._count := _count + n;
end;
E yukarıda record'daki Add operatörü ile bu sınıfta yazdığımız add fonksiyonu aynı kodları kullanıyor. Neden + operatörü varken add diye bir metot yazayım ki? Sizce bu operatör aşırı yükleme konusu Delphi gibi sınıfları heap'de tutulan dillerde olmaması mı yoksa olması mı daha iyi olur? Yani ben bellek tahsisi için bir problem göremiyorum.

Teşekküler.
konu: Yazılım Hatalarını Bulmak İçin Yazılım  ; forum:: Diğer Konular
İbrahim #9
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12865
Cevabınız için teşekkür ederim. Aslında ben Valgrind adlı yazılımı çok duydum. Ben C++ yazılımları için böyle bir  araç arıyorum. Öncelik olarak bellek sizintilarini ve gereksiz bellek kullanan bölümleri gösteren bir araç arıyorum. Sanırım Valgrind bu işi yapıyor. Fakat bellek sızıntısı ve gereksiz bellek kullanan kod bölümlerini nasıl bulacağım ve görsel bir şekilde görebilir miyim?
konu: Yazılım Hatalarını Bulmak İçin Yazılım  ; forum:: Diğer Konular
İbrahim #10
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Yazılım Hatalarını Bulmak İçin Yazılım
Selamün Aleyküm;

Geliştirdiğimiz yazılımlarda oluşabilecek bellek sızıntılarını ve diğer hataları gösterebilecek kolay kullanımlı bir yazılım var mı? Siz hangisini kullanıyorsunuz? Teşekkürler.
konu: İngilizce'yi Öğrenmek (Sadece İngilizce Gramer Değil, Kalıplar ve Daha Fazlası İçin...)  ; forum:: Diğer Konular
İbrahim #11
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12821
@kerdemdemir cevap için teşekkürler.
@erdem Accerelerated C++'ı okumadım. Aslında bu benim daha ilk İngilizce programlama kitabı okumam olacak. Ben C++'ı Robert Lafore - Nesne Yönelimli C++ Programlama Kılavuzu (Türkçe) kitabından öğrendim. Daha sonra İngilizce dökümanlar falan okudum (Qt vs. gibi). Yani daha yeniyim kitap okuma meselesinde.
konu: İngilizce'yi Öğrenmek (Sadece İngilizce Gramer Değil, Kalıplar ve Daha Fazlası İçin...)  ; forum:: Diğer Konular
İbrahim #12
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: İngilizce'yi Öğrenmek
Selamün Aleyküm;

Ben İngilizce için şu kitapta anlatılan tüm konuları biliyorum: http://www.kitapyurdu.com/kitap/ogreten-ingilizce-donusuml… Lakin elimde sözlük de olduğu halde İngilizce kitaplarda yazılan birçok cümlede tam olarak ne demek istediğini anlayamıyorum. Mesela Effective Modern C++ kitabını okumaya çalışıyorum fakat şöyle bir cümlenin tam olarak ne anlama geldiğini bilemiyorum:
Modern C++ (i.e., C++11/C++14) is far more than just a facelift.
Ben bu cümlenin kelimelerini biliyorum: far : uzak, facelift : yenileme, tadilat, yüz gerdirme (kaynak: https://www.seslisozluk.net/facelift-nedir-ne-demek/). Bu kelimelere bakarak düz bir çeviri yaptığımda şöyle saçma ve anlamsız bir cümle çıkıyor: "Modern C++ bir yenilemeden daha uzaktır". Ne kadar saçma öyle değil mi? :) :)
Lakin bu İngilizce cümleden şöyle düzgün bir cümle çıkardım (aslında kendim uydurdum, bilgim yok): "Modern C++ göründüğünden daha fazlasıdır". Yeterli gramere ve sözlüğe sahip olduğumu düşünüyorum ama nedense her okuyuşumda farklı farklı kalıplar karşıma çıkıyor. İnternetten araştırmalarım neredeyse hiç yararlı olmuyor. Bu tür değişik kalıpları ve artık daha ne varsa öğrenebilmem için ne yapmalıyım? Sizlerden İngilizce'yi iyi derecede bilenleriniz İngilizce'nin grameri haricinde bu tür kalıpları nasıl öğrendiniz? Benim gibi en azından okuduğu kitabı tam olarak anlayabilmek isteyenlere neler önerirsiniz?

Teşekkürler!
konu: Dilleri Birbirine Bağlamak İçin Bağlayıcı Yazılımı  ; forum:: Diğer Konular
İbrahim #13
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12811
Bence en kolayı kütüphane kullanmak. Onu meşakkatli buluyorsan durum kötü. :)
:) Evet aslında dediğiniz gibi kütüphane kullanmak daha kolay olabiliyor ama C sarmalayıcısı (wrapper) yazmak zorundayız ve bu gerçekten programlama dillerine uydurmayı bazen zorlaştırıyor. Mesela Google'ın Firebase aracı var. Bu Firebase C++ dili kullanılarak yazılmış lakin asıl kaynak kodlar açık kaynak kodlu değil ve statik kütüphane kullanılıyor. .h başlık dosyaları ile de kullanabiliyoruz. Eğer bu kütüphaneyi Object Pascal'da kullanmak istersek .h dosyalarını okuyarak bir C sarmalayıcısı yazmak zorundayız. Bu benim için kolay olabiliyor ama ben geliştirmeye çalıştığım aracı başkaları daha kolay kullanabilsin istiyorum. Yani geliştirici C++ kodunu sarmalayıcılarla parçalayacağına direk C++ sınıflarını, değişkenlerini, yapılarını vs. vs. direk olarak kullanabilsin istiyorum. Mesela Qt da C++ kodlarını QML'de kullanırken bize böyle bir imkan sağlıyor.

D'den örnek vermek gerekirse, kullandığımız ilinti dosyaları (C ve C++ kütüphanelerinin D binding'leri) gösterdiğin kodları destekliyor.
D'de extern (C++) kullanarak C++ kodlarını nasıl kullandığına baktım ve benim yapmak istediğim birşeyi D için yapmışlar. Ben de buna benzer bir yapıyı Object Pascal için yapmak istiyorum. Aslında C++ ve Object Pascal yapı olarak birbirlerine çok benziyorlar. Lakin Object Pascal'da olan bazı kurallar C++'da, C++'da olan bazı kurallar da Object Pascal'da yok. Mesela Object Pascal'da öznitelikler (properties) var:
property name : String read getName write setName;
Böyle bir yapı C++'da olmadığı için şöyle birşey tasarlamak istiyorum:
// C++ kodu
std::string name; // ya da char* name; de olabilir
//...
PASCAL_PROPERTY(name READ getName WRITE setName)
Bu tür bir yapı oluşturmak istiyorum. Bu PASCAL_PROPERTY bir önişlemci kodu olabilir. Hatta kabaca şöyle bir yapı olabilir:
PASCAL_NAMESPACE namespace abc
{
  PASCAL_CLASS class Test
  {
  private:
    std::map _map;
    std::string _str;
    std::string _name;
 
    void setName(const std::string& str);
    std::string getName() const;
  public:
    Test();
    Test(const std::map& map, const std::string& str);
    
    PASCAL_PROPERTY(std::string name READ getName WRITE setName)
 
    PASCAL_METHOD void hello(const char* name) const;
  };
}
Bunu bir bağlayıcı ile Object Pascal'da şuna çevireceğim (Bağlayıcı derleme aşamasında bu önişlemcileri otomatik Pascal dosyasına dönüştürecek, mesela burada abc.pas dosyası oluşturup içine bunları koymalı):
unit abc; // C++ Namespace
 
interface
 
type
  Test = class // C++ Test Class
  private
    _map: TMap;    // C++ : std::map _map;
    _str: String;  // C++ : std::string _str;
    _name: String; // C++ : std::string _name;
 
    procedure setName(const str: String);
    function getName : String;
  public
    constructor Create; overload;
    constructor Create(const map: TMap; const str: String); overload;
 
    // C++ : PASCAL_PROPERTY
    property name: string read getName write setName;
 
    // C++ : PASCAL_METHOD
    procedure hello(const name: PAnsiChar);
  end;
 
implementation
end.
Böyle bir bağlayıcı geliştirmek için nasıl bir yol izlenmeli? std::map vb. işler için de TMap(const std::map& map) gibi yeni sınıflar yazacağım. Bu iş için C++'da bu tür önişlemcilere nasıl komutlar verebilirim?
konu: Dilleri Birbirine Bağlamak İçin Bağlayıcı Yazılımı  ; forum:: Diğer Konular
İbrahim #14
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Dilleri Birbirine Bağlamak İçin Bağlayıcı Yazılımı
Selamün Aleyküm;

Kodlarımızı bir dille yazıp birçok dilde kullanmak istediğimiz zamanlar oluyor. Bu durumlarda statik / dinamik kütüphaneler olarak kullanabiliyoruz. Lakin bu biraz meşakkatli olabiliyor. Ben de şöyle birşey düşündüm, mesela bir bağlayıcı olsa ve misal C++ kodlarını Python veyahut da başka bir dilde kullanılabilir hale getirse. Yani örneklemek gerekirse şöyle bir C++ kodumuz olsun:
class Test : public AbstractClass, private SubProp
{
private:
  // private üyeler
public:
  Test();
  Test(const std::string& str);
 
  void set_map(const std::map<std::string, std::string>& map)
  {
    // ...
  }
 
  std::map get_map() const
  {
    // ...
  }
};
Şimdi bu kodu Python'da şöyle kullanmak istiyoruz:
from Test import *;
 
def main():
    test_instance = Test()
    test_instance2 = Test('Hello!')
 
    test_instance.set_map({ 'name' : 'Ali', 'no' : '123' })
    result = test_instance.get_map()
Veyahut da Object Pascal'da şöyle kullanmak istiyoruz:
uses Test;
 
var
  testInstance  : Test;
  testInstance2 : Test;
  map           : TMap<string, string>;
begin
  testInstance := Test.Create;
  testInstance2 := Test.Create('Hi!');
  map := TMap<string, string>.Create;
  map.insert('name', 'Ali');
  map.insert('no', '123');
  testInstance.set_map(map);
  result := testInstance.get_map;
end.
Yalnız bunları kullanmak için C++ wrapper ve statik / dinamik bir kütüphane hazırlamadan kullanmak istiyoruz. Mesela "C++ tarafında şu şu sınıfı / nesneyi falan dilde kullanmak istiyorum" gibisinden bazı işaretlemeler mi koymalıyız? Mesela şöyle:
// C++
PASCAL_SINIFI class Test : public AbstractClass, private SubProp
{
  // ...
};
Bunun için bir bağlayıcı (linker) yazılabilir mi? Eğer evetse nasıl yazılabilir? Mantığı nasıl kurmalıyım?
Teşekkürler!
konu: Synchronize ve Asynchronous Kavramları Birbirlerinin Tam Tersi Olmalı Değil Mi?  ; forum:: Diğer Konular
İbrahim #15
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 12726
Verdiğiniz bilgiden dolayı teşekkürler @acehreli, el alışkanlığından olsa gerek "asynchronize" yazmışım :)

Şurada (asynchronous: http://searchnetworking.techtarget.com/definition/asynchro…) anlatıldığına göre benim anladığım asynchronous kelimesini Türkçe'de eşzamansız değil de "zamanla olmayan" ya da "zamansız" anlamlarına geliyormuş. Bu durumda programlama için şöyle bir Türkçeleştirme yapabiliriz sanırım:

synchronize -> zaman aralıklı
asynchronous -> zaman aralıksız
Özel Karakterler:
Sayfa:  1  2  3 ... 9  10  11  sonraki 
Özel sorgulamalar

Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 17:21:40 (UTC -08:00)