FreeBasic
Главная
Вход
Регистрация
Среда, 24.04.2024, 13:03Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Freebasic Сборка компилятора версии 0.25 (Freebasic Сборка компилятора версии 0.25)
Freebasic Сборка компилятора версии 0.25
haavДата: Среда, 19.12.2012, 22:54 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Freebasic Сборка компилятора версии 0.25


Для тех кому интересно, в ней встроены абстрактные и виртуальные методы.

Скачивание:

fbc0.25_windows.zip

fbc0.25_linux.zip

Вот например несколько примеров от fxm:

Это виртуальный:

Code
Type Hello extends object
   Declare virtual Sub hi( )
End Type

Type HelloEnglish extends Hello
   Declare Sub hi( )
End Type

Type HelloFrench extends Hello
   Declare Sub hi( )
End Type

Type HelloGerman extends Hello
   Declare Sub hi( )
End Type

Sub Hello.hi( )
   Print "hi!"
End Sub

Sub HelloEnglish.hi( )
   Print "hello!"
End Sub

Sub HelloFrench.hi( )
   Print "Salut!"
End Sub

Sub HelloGerman.hi( )
   Print "Hallo!"
End Sub

Randomize( Timer( ) )

Dim As Hello Ptr h

For i As Integer = 0 To 9
   Select Case( Int( Rnd( ) * 4 ) + 1 )
    Case 1
     h = New HelloEnglish
    Case 2
     h = New HelloFrench
    Case 3
     h = New HelloGerman
    Case Else
     h = New Hello
   End Select

   h->hi( )
   Delete h
Next
Sleep


Это абстрактный:

Code
Type Hello extends object
   Declare abstract Sub hi( )
End Type

Type HelloEnglish extends Hello
   Declare Sub hi( )
End Type

Type HelloFrench extends Hello
   Declare Sub hi( )
End Type

Type HelloGerman extends Hello
   Declare Sub hi( )
End Type

Sub HelloEnglish.hi( )
   Print "hello!"
End Sub

Sub HelloFrench.hi( )
   Print "Salut!"
End Sub

Sub HelloGerman.hi( )
   Print "Hallo!"
End Sub

Randomize( Timer( ) )

Dim As Hello Ptr h

For i As Integer = 0 To 9
   Select Case( Int( Rnd( ) * 3 ) + 1 )
    Case 1
     h = New HelloFrench
    Case 2
     h = New HelloGerman
    Case Else
     h = New HelloEnglish
   End Select

   h->hi( )
   Delete h
Next
sleep


А это как я понял адаптация исходника java на FreeBasic:

Code

' //: c05:Games.java
' // An example of the Abstract Factory pattern.
' import com.bruceeckel.test.*;

' interface Obstacle {
'   void action();
' }
Type Obstacle Extends Object
    Declare Abstract Sub action()
End Type

' interface Player {
'   void interactWith(Obstacle o);
' }
Type Player Extends Object
    Declare abstract Sub interactWith (Byval o As Obstacle Ptr)
End Type

' class Kitty implements Player {
'   public void interactWith(Obstacle ob) {
'     System.out.print("Kitty has encountered a ");
'     ob.action();
'   }
' }
Type Kitty Extends Player
    Declare Sub interactWith (Byval ob As Obstacle Ptr)   
End Type
Sub Kitty.interactWith (Byval ob As Obstacle Ptr)
    Print "Kitty has encountered a "
    ob->action()
End Sub

' class KungFuGuy implements Player {
'   public void interactWith(Obstacle ob) {
'     System.out.print("KungFuGuy now battles a ");
'     ob.action();
'   }
' }
Type KungFuGuy Extends Player
    Declare Sub interactWith (Byval ob As Obstacle Ptr)   
End Type
Sub KungFuGuy.interactWith (Byval ob As Obstacle Ptr)
    Print "KungFuGuy now battles a "
    ob->action()
End Sub

' class Puzzle implements Obstacle {
'   public void action() {
'     System.out.println("Puzzle");
'   }
' }
Type Puzzle Extends Obstacle
    Declare Sub action ()   
End Type
Sub Puzzle.action ()
    Print "Puzzle"
End Sub

' class NastyWeapon implements Obstacle {
'   public void action() {
'     System.out.println("NastyWeapon");
'   }
' }
Type NastyWeapon Extends Obstacle
    Declare Sub action ()   
End Type
Sub NastyWeapon.action ()
    Print "NastyWeapon"
End Sub

' // The Abstract Factory:
' interface GameElementFactory {
'   Player makePlayer();
'   Obstacle makeObstacle();
' }
Type GameElementFactory Extends Object
    Declare Abstract Function makePlayer () As Player Ptr
    Declare Abstract Function makeObstacle () As obstacle Ptr
End Type

' // Concrete factories:
' class KittiesAndPuzzles
' implements GameElementFactory {
'   public Player makePlayer() {
'     return new Kitty();
'   }
'   public Obstacle makeObstacle() {
'     return new Puzzle();
'   }
' }
Type KittiesAndPuzzles Extends GameElementFactory
    Declare Function makePlayer () As Player Ptr   
    Declare Function makeObstacle () As obstacle Ptr   
End Type
Function KittiesAndPuzzles.makePlayer () As Player Ptr
    Return New Kitty()
End Function
Function KittiesAndPuzzles.makeObstacle () As obstacle Ptr
    Return New Puzzle()
End Function

' class KillAndDismember
' implements GameElementFactory {
'   public Player makePlayer() {
'     return new KungFuGuy();
'   }
'   public Obstacle makeObstacle() {
'     return new NastyWeapon();
'   }
' }
Type KillAndDismember Extends GameElementFactory
    Declare Function makePlayer () As Player Ptr   
    Declare Function makeObstacle () As obstacle Ptr   
End Type
Function KillAndDismember.makePlayer () As Player Ptr
    Return New KungFuGuy()
End Function
Function KillAndDismember.makeObstacle () As obstacle Ptr
    Return New NastyWeapon()
End Function

' class GameEnvironment {
'   private GameElementFactory gef;
'   private Player p;
'   private Obstacle ob;
'   public GameEnvironment(
'     GameElementFactory factory) {
'     gef = factory;
'     p = factory.makePlayer();
'     ob = factory.makeObstacle();
'   }
'   public void play() { p.interactWith(ob); }
' }
Type GameEnvironment
Private:
    Dim As GameElementFactory Ptr gef
    Dim As Player Ptr p
    Dim As Obstacle Ptr ob
Public:
    Declare Constructor (Byval factory As GameElementFactory Ptr)
    Declare Sub play ()
End Type
Constructor gameEnvironment (Byval factory As GameElementFactory Ptr)
    gef = factory
    p = factory->makePlayer()
    ob = factory->makeObstacle()
End Constructor
Sub gameEnvironment.play
    p->interactWith(ob)
end sub

' public class Games extends UnitTest {
'   GameElementFactory
'     kp = new KittiesAndPuzzles(),
'     kd = new KillAndDismember();
'   GameEnvironment
'     g1 = new GameEnvironment(kp),
'     g2 = new GameEnvironment(kd);
'   // These just ensure no exceptions are thrown:
'   public void test1() { g1.play(); }
'   public void test2() { g2.play(); }
'   public static void main(String args[]) {
'     Games g = new Games();
'     g.test1();
'     g.test2();
'   }
' } ///:~
'  ...
Dim As GameElementFactory Ptr kp, kd
kp = new KittiesAndPuzzles()
kd = new KillAndDismember()
Dim As GameEnvironment Ptr g1, g2
g1 = new GameEnvironment(kp)
g2 = new GameEnvironment(kd)
g1->play()
Print
g2->play()

Sleep

Delete g1
Delete g2
Delete kp
Delete kd


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
MihaДата: Воскресенье, 23.12.2012, 12:34 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 13
Репутация: 0
Статус: Offline
Это уже не freebasic а java или c++ какой то получается wacko ... неужели это комуто нужно??? eek basic тем и хорош что простой а тут cool
 
haavДата: Четверг, 24.01.2013, 18:16 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Обновлена сборка от 18.01.2013.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Суббота, 26.01.2013, 16:48 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Обновлена сборка от 26.01.2013.

Кстати в 0.25 уже не прокатит называть переменную тем же именем как у класса.

Код
type A
     i as integer
     declare sub s()
end type

dim b as A ' Правильно

dim a as A ' Неправильно для версии 0.25

sub A.s
      
end sub


Для тех , кто привык к такому методу и имеет кое-какие обновляемые проекты , придется не по вкусу...
Я не знаю что с моими проектами, возможно тоже придется в некоторых повозиться с адаптацией под новый компиль.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Вопросы по языку FreeBasic » Freebasic Сборка компилятора версии 0.25 (Freebasic Сборка компилятора версии 0.25)
  • Страница 1 из 1
  • 1
Поиск: