Hur sätter man ihop två program i Java? Interface?

Permalänk

Hur sätter man ihop två program i Java? Interface?

Hej!

Nu är det så att jag ska göra ett MP3 spelarprogram i Java och den ska vara för Raspberry Pi där jag ska använda Pi4J.
Sjävla MP3 spelaren kommer jag göra i PC (Ubuntu) och själva LCD, potentiometer, ADC kommer jag göra Raspberry Pi. Med tanke på att jag hittade min gamla Raspberry Pi B+ så kommer jag vara tvungen att koda Java i Raspberry Pi B+ manuellt. Inget jag kan göra i Ubuntu då Pi4J kan ej komplimeras på vanlig PC.

Så då blir det en klass för MP3 och en klass för LCD och en klass för ADC/potentiometer. Det är så här jag antar grupp-programmering fungerar. Att ena jobbar med den klassen och andra jobbar med den andra klassen. Sätter man ihop dom, så ska dom fungera tillsammans.

Nu låter detta väll lite för enkelt, men tänk istället att det är 100 programmerare på ett projekt. Vem gör vad? Vem vet vad? Hur får man allt fungera?

Så jag tänkte programmera MP3 klasser i Ubuntu och sedan programmerar jag LCD, ADC, Potentiometer klasser i Raspberry. När jag sätter ihop dom så ska det fungera.

Jag har ett svagt minne att interface brukar vara ett effektivt verktyg här. Men har jag rätt eller har jag fel?

Permalänk
Medlem

Korrekta sättet är att kod aporna skapar interface så att dom kan arbeta med varandras saker, se dependency injection.

Mer vanligt är spaghetti klasser av cirkulära beroenden.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Inget jag kan göra i Ubuntu då Pi4J kan ej komplimeras på vanlig PC.

Är du säker på det? De påstår sig ha någon form av korskompileringsstöd.

Permalänk
Medlem
Skrivet av heretic16:

Nu låter detta väll lite för enkelt, men tänk istället att det är 100 programmerare på ett projekt. Vem gör vad? Vem vet vad? Hur får man allt fungera?

Detta är inte ett löst problem. Olika organisationer applicerar olika arbetsmetodologier och programmeringsprinciper för att minska konflikter mellan grenar av kodbasen. Olika tekniker har olika för- och nackdelar rent objektivt, men det är också ett väldigt subjektivt val. Tycker du är inne på rätt spår med interfaces dock -- det är väldigt vanligt med stora kodbaser att man skriver specifikationer för gränssnitten mellan objekt/processer/moduler först, och implementerar dem i form av publika funktioner och datatyper, interface, abstrakta klasser, etc. Man brukar tidigt besluta om ett minimalt publikt gränssnitt som en klass eller modul måste ha, och som andra kan förlita sig på finns och inte förändras, sedan kan man modifiera privata funktioner och annat hejvilt inom modulen.

EDIT: Du bör dock inte programmera defensivt för det osannolika fallet att ditt hobbyprojekt kommer komma att arbetas på av en stor mängd programmerare. Skriv inte interfaces som bara implementeras av en enda klass "bara för säkerhets skull" etc.

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Medlem

Jag har aldrig haft problem med att kompilera Pi4j på diverse os och hårdvara. Man får ett felmeddelande om man försöker köra någonting rpi specifikt på en vanlig dator men går utmärkt att utveckla och kompilera. Själva testandet får man gör på en rpi.

Skickades från m.sweclockers.com

Permalänk
Skrivet av Elgot:

Är du säker på det? De påstår sig ha någon form av korskompileringsstöd.

Jag menade köra programmet med try-catch!

Permalänk
Skrivet av Sinery:

Korrekta sättet är att kod aporna skapar interface så att dom kan arbeta med varandras saker, se dependency injection.

Mer vanligt är spaghetti klasser av cirkulära beroenden.

Skrivet av Bryal:

Detta är inte ett löst problem. Olika organisationer applicerar olika arbetsmetodologier och programmeringsprinciper för att minska konflikter mellan grenar av kodbasen. Olika tekniker har olika för- och nackdelar rent objektivt, men det är också ett väldigt subjektivt val. Tycker du är inne på rätt spår med interfaces dock -- det är väldigt vanligt med stora kodbaser att man skriver specifikationer för gränssnitten mellan objekt/processer/moduler först, och implementerar dem i form av publika funktioner och datatyper, interface, abstrakta klasser, etc. Man brukar tidigt besluta om ett minimalt publikt gränssnitt som en klass eller modul måste ha, och som andra kan förlita sig på finns och inte förändras, sedan kan man modifiera privata funktioner och annat hejvilt inom modulen.

EDIT: Du bör dock inte programmera defensivt för det osannolika fallet att ditt hobbyprojekt kommer komma att arbetas på av en stor mängd programmerare. Skriv inte interfaces som bara implementeras av en enda klass "bara för säkerhets skull" etc.

Nu brukar jag typ aldrig använda interface, mina egna alltså. Så jag tänkte fråga om ni har tid att visa ett arbetsexempel där person 1 gör en klass som kräver olika argument har har olika metoder och person 2 skapar en klass som använder sig utav person 1's klass utan att ens veta hur klassen fungerar. Mest bara vad den vill ha och vad den retunerar.

Detta känns som jag behöver bli bättre på.

Permalänk
Medlem

Finns många sätt att få två Java program att prata med varandra. Men för ett program av denna typen så skulle jag bara göra ett program. Skriv det på ett sånt sätt så att övriga delar fungerar även om Pi4j inte gör det. Då kan du testköra dom delarna på en vanlig dator

Skickades från m.sweclockers.com

Permalänk
Medlem

På jobbet är vi sex personer som jobbar med samma program. För det mesta jobbar man på samma sätt som om man var ensam. Dvs man anropar dom funktionerna som man behöver oavsett vem som skrivit dom. För större och tydligt avgränsande delar använder vi moduler och eller bibliotek. Ofta då med ett par väldokumenterade publika klasser som andra personer kan använda som gränsnitt. Sen kör vi med en micro service arkitektur för att kommunicera mellan helt olika program

Skickades från m.sweclockers.com

Permalänk
Skrivet av mwi:

På jobbet är vi sex personer som jobbar med samma program. För det mesta jobbar man på samma sätt som om man var ensam. Dvs man anropar dom funktionerna som man behöver oavsett vem som skrivit dom. För större och tydligt avgränsande delar använder vi moduler och eller bibliotek. Ofta då med ett par väldokumenterade publika klasser som andra personer kan använda som gränsnitt. Sen kör vi med en micro service arkitektur för att kommunicera mellan helt olika program

Skickades från m.sweclockers.com

Så det handlar mest bara att dokumentera klassen vad som görs och signalera till andra att klassen existerar?

Jag försökte sätta mig in vad Deeplearning4J försökte förklara i sina klasser. Herregud vilken röra koden verkar vara, eller så är det bara jag som inte förstår überprogrammerare som skapar den mest avancerade OOP-koden någonsin?

Kod som jag inte förstår är OjAlgo.
Här är alltså EN klass för en grundmatris. Alltså en matris...
https://github.com/optimatika/ojAlgo/blob/develop/src/org/oja...

Förstår 0% vad som sägs. Måste han göra så avancerat? Kunde han inte bara använda en 2D array?

Permalänk
Hedersmedlem
Skrivet av heretic16:

Så det handlar mest bara att dokumentera klassen vad som görs och signalera till andra att klassen existerar?

Jag försökte sätta mig in vad Deeplearning4J försökte förklara i sina klasser. Herregud vilken röra koden verkar vara, eller så är det bara jag som inte förstår überprogrammerare som skapar den mest avancerade OOP-koden någonsin?

Visa det du inte förstår.

Permalänk
Skrivet av Shimonu:

Visa det du inte förstår.

Men tänk att jag gör en klass, eller klasser.
Sedan ska någon annan använda dessa klasser. Dom har ingen kännedom utav klasserna hur dom fungerar. Dom vet dock vad den vill ha och vad den retunerar tillbaka.

Detta låter riktigt enkelt. Men vi säger att det är fler än 2 som jobbar på projektet. Hur bygger man upp strukturen då?

Här är ett exempel. Varför interface här?
https://github.com/optimatika/ojAlgo/blob/develop/src/org/oja...

Varför inte en klass?

Permalänk
Hedersmedlem
Skrivet av heretic16:

Men tänk att jag gör en klass, eller klasser.
Sedan ska någon annan använda dessa klasser. Dom har ingen kännedom utav klasserna hur dom fungerar. Dom vet dock vad den vill ha och vad den retunerar tillbaka.

Detta låter riktigt enkelt. Men vi säger att det är fler än 2 som jobbar på projektet. Hur bygger man upp strukturen då?

Jag menade koden från DeepLearning4J, som är så komplicerad. Kan du visa vad du tycker är så avancerat?

Permalänk
Skrivet av Shimonu:

Jag menade koden från DeepLearning4J, som är så komplicerad. Kan du visa vad du tycker är så avancerat?

Typ här.
https://github.com/eclipse/deeplearning4j/blob/master/deeplea...

För det första så finns det inga kommentarer. Redan här blir det svårt.
För det andra så undrar man om man kan göra det på enklare sätt.

Detta känns som pro-java:ers som har skrivit koden.

Vill bara notera att jag själv använder Deeplearning4j och Deeplearning2C.

Permalänk
Medlem
Skrivet av heretic16:

Typ här.
https://github.com/eclipse/deeplearning4j/blob/master/deeplea...

För det första så finns det inga kommentarer. Redan här blir det svårt.
För det andra så undrar man om man kan göra det på enklare sätt.

Detta känns som pro-java:ers som har skrivit koden.

Vill bara notera att jag själv använder Deeplearning4j och Deeplearning2C.

Förhoppningsvis är biblioteksförfattarna riktiga pro-java:ers, ja. Intern bibliotekskod är sällan menad att vara läsbar för gemene utvecklare, utan bra bibliotek är optimerade för prestanda, och kan använda alla möjligt sorters svårförståeliga hack för att göra koden snabbare. Det är också vanligt att intern kod inte är väl dokumenterad -- varför ska ett team dokumentera kod som de själva redan förstår och användaren inte är tänkt att läsa? Du gör oftast bättre i att leta upp bibliotekets genererade doxygen-dokumentation eller motsvarande, där du kan studera det publika api som du faktiskt kan använda dig av.

Det sagt föredrar jag själv såklart när även intern kod är skriven med läsbarhet i åtanke, då det kan vara skoj eller lärorikt att ta sig en titt ibland. Jag har dock full förståelse för varför så ofta inte är fallet.

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Hedersmedlem
Skrivet av heretic16:

Här är ett exempel. Varför interface här?
https://github.com/optimatika/ojAlgo/blob/develop/src/org/oja...

Varför inte en klass?

Ibland är kanske inte svaret djupare än att den som skrev det hade flera alternativ och valde ett baserat på egen smak, firmans kodningsstandard eller liknande.